diff options
345 files changed, 26634 insertions, 24047 deletions
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 62eb69aeb..2814d3cdb 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -73,7 +73,7 @@ jobs: build-mac: name: 'test build (macos)' needs: format - runs-on: macos-13 + runs-on: macos-14 steps: - uses: actions/checkout@v3 with: @@ -87,7 +87,7 @@ jobs: run: | mkdir build cd build - export Qt5_DIR="/usr/local/opt/qt@5/lib/cmake" + export Qt5_DIR="$(brew --prefix qt@5)/lib/cmake" cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF ninja build-msvc: diff --git a/CMakeLists.txt b/CMakeLists.txt index eb26fbfd8..d460f1f7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -307,7 +307,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.274 REQUIRED) + find_package(VulkanHeaders 1.3.274 REQUIRED) endif() if (NOT YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES) @@ -322,6 +322,10 @@ if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) find_package(xbyak 6 CONFIG) endif() +if (ARCHITECTURE_arm64) + find_package(oaknut 2.0.1 CONFIG) +endif() + if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) find_package(dynarmic 6.4.0 CONFIG) endif() diff --git a/dist/languages/ar.ts b/dist/languages/ar.ts index ba991921a..8a0c520ec 100644 --- a/dist/languages/ar.ts +++ b/dist/languages/ar.ts @@ -679,759 +679,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>ساعة مخصصة ÙÙŠ الوقت الØÙ‚يقي</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>اللغة:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>ملØÙˆØ¸Ø©: قد يتم تجاهل هذا الإعداد عندما ÙŠØØ¯Ø¯ إعداد المنطقة على الإختيار التلقائي</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>المنطقة:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>المنطقة الزمنية:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>وضع إخراج الصوت:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>وضع ÙˆØØ¯Ø© التØÙƒÙ…:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>مطالبة المستخدم عند تشغيل اللعبة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Ø¥ÙŠÙ‚Ø§Ù Ø§Ù„Ù…ØØ§ÙƒØ§Ø© مؤقتًا عندما تكون ÙÙŠ الخلÙية</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>قم بالتأكيد قبل Ø¥ÙŠÙ‚Ø§Ù Ø§Ù„Ù…ØØ§ÙƒØ§Ø©</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Ø¥Ø®ÙØ§Ø¡ الماوس عند عدم النشاط</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>تعطيل تطبيق التØÙƒÙ…</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>تمكين وضع اللعبة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>المعالج</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>ÙˆØØ¯Ø© معالجة الرسومات</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Uncompressed (Ø£ÙØ¶Ù„ جودة)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (جودة Ù…Ù†Ø®ÙØ¶Ø©)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (جودة متوسطة)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>لا شيء</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>عادي</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>عالي</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>تلقائي</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>دقه</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>غير آمن</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Ù†ÙˆØ§ÙØ° بلا ØØ¯ÙˆØ¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>شاشة كاملة ØØµØ±ÙŠØ©</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>لا يوجد إخراج Ùيديو</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [تجريبي]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [تجريبي]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [تجريبي]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest Neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussian</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>لا شيء</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>(16:9) Ø§ÙØªØ±Ø§Ø¶ÙŠ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>4:3 ÙØ±Ø¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>21:9 ÙØ±Ø¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>16:10 ÙØ±Ø¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>تمتد إلى Ø§Ù„Ù†Ø§ÙØ°Ø©</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>تلقائي</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Ø§ÙØªØ±Ø§Ø¶ÙŠ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>اليابانية (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Ø§Ù„ÙØ±Ù†Ø³ÙŠØ© الأوروبية (Français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>الألمانية (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>الإيطالية (Italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>الإسبانية الأوروبية (Español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>الصينية المبسطة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>الكورية (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>الهولندية (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>البرتغالية الأوروبية (Português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>الروسية (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>الصينية التقليدية (تايوان)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>الإنكليزية البريطانية</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Ø§Ù„ÙØ±Ù†Ø³ÙŠØ© الأمريكية (كندا)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>الإسبانية الأمريكية (أمريكا اللاتينية)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>الصينية المبسطة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>الصينية التقليدية (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>اليابان</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>الولايات Ø§Ù„Ù…ØªØØ¯Ø© الأمريكية</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>أوروبا</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>أستراليا</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>الصين</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>كوريا</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>تايوان</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>تلقائي (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Ø§ÙØªØ±Ø§Ø¶ÙŠ (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>صوت مونو</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>صوت ستيريو</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>صوت سيراوند</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (Ø§ÙØªØ±Ø§Ø¶ÙŠ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (غير آمنة)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (غير آمنة)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>مركب بالمنصة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Ù…ØÙ…ول</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Always ask (Ø§ÙØªØ±Ø§Ø¶ÙŠ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Ùقط إذا ØØ¯Ø¯Øª اللعبة عدم التوقÙ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>لا تسأل أبدا</translation> </message> @@ -2281,33 +2281,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>:لون الخلÙية</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>معطل</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync معطل</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Ù…Ø³ØªØØ³Ù†</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Ù…ÙØ¹Ù„</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync Ù…ÙØ¹Ù„</translation> </message> @@ -3372,6 +3372,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3706,42 +3715,47 @@ Current values are %1% and %2% respectively.</source> <translation>بعض الإعدادات ØªØªÙˆÙØ± عند عدم تشغيل اللعبة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Ø§Ù„Ø§Ø¶Ø§ÙØ§Øª</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>النظام</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>المعالج</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>الرسومات</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>الرسومات المتقدمة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>الصوت</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Ù…Ù„ÙØ§Øª تعري٠الإدخال</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>خصائص</translation> </message> @@ -3845,67 +3859,67 @@ Current values are %1% and %2% respectively.</source> <translation>:أدخل اسم مستخدم للمستخدم الجديد</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>:أدخل اسم مستخدم جديد</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>اختر صورة المستخدم</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>صور JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>خطأ ÙÙŠ ØØ°Ù الصورة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>%1 ØØ¯Ø« خطأ أثناء Ù…ØØ§ÙˆÙ„Ø© الكتابة Ùوق الصورة السابقة ÙÙŠ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>خطأ ÙÙŠ ØØ°Ù الملÙ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>%1 غير قادر على ØØ°Ù المل٠الموجود</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>خطأ ÙÙŠ إنشاء مجلد صورة المستخدم</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>ØØ¯Ø« خطأ أثناء نسخ صورة المستخدم</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>خطأ ÙÙŠ تغيير ØØ¬Ù… صورة المستخدم</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>غير قادر على تغيير ØØ¬Ù… الصورة</translation> </message> @@ -3913,17 +3927,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>ØØ°Ù هذا المستخدم؟ سيتم ØØ°Ù جميع بيانات الØÙظ الخاصة بالمستخدم.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>تأكيد Ø§Ù„ØØ°Ù</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>الاسم: %1 @@ -4077,7 +4091,7 @@ UUID: %2</source> <translation>النواة</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4789,1086 +4803,1028 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>القياس عن بعد</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>معطل Vulkan تم اكتشا٠تثبيت</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>تشغيل لعبة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>جار٠تØÙ…يل برنامج الويب...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>تعطيل برنامج الويب</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>كمية التظليل التي يتم بناؤها ØØ§Ù„يا</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>مضاع٠قياس الدقة Ø§Ù„Ù…ØØ¯Ø¯ Ø§Ù„ØØ§Ù„ÙŠ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>سرعة Ø§Ù„Ù…ØØ§ÙƒØ§Ø© Ø§Ù„ØØ§Ù„ية. تشير القيم الأعلى أو الأقل من 100% إلى أن Ø§Ù„Ù…ØØ§ÙƒØ§Ø© تعمل بشكل أسرع أو أبطأ من سويتش.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>إلغاء الكتم</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>كتم</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>إعادة ضبط مستوى الصوت</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Ù…Ø³Ø Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„ØØ¯ÙŠØ«Ø©</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&استأنÙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&إيقا٠مؤقت</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>ØªØØ°ÙŠØ± من تنسيق اللعبة القديم</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>ROM خطأ أثناء تØÙ…يل </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>غير مدعوم ROM تنسيق.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>ØØ¯Ø« خطأ أثناء تهيئة مركز الÙيديو.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>ØØ¯Ø« خطأ غير معروÙ. يرجى الاطلاع على السجل لمزيد من Ø§Ù„ØªÙØ§ØµÙŠÙ„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>إغلاق البرامج</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>ØÙظ البيانات</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>%1 ØØ¯Ø« خطأ أثناء ÙØªØ المجلد</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>المجلد غير موجود</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>ÙØ´Ù„ إنشاء مجلد ذاكرة التخزين المؤقت للتظليل لهذا العنوان.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>خطأ ÙÙŠ إزالة Ø§Ù„Ù…ØØªÙˆÙŠØ§Øª</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>خطأ ÙÙŠ إزالة Ø§Ù„ØªØØ¯ÙŠØ«</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>DLC خطأ ÙÙŠ إزالة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>هل تريد إزالة Ù…ØØªÙˆÙŠØ§Øª اللعبة المثبتة؟</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>هل تريد إزالة ØªØØ¯ÙŠØ« اللعبة المثبت؟</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>للعبة المثبتة؟ DLC إزالة Ø§Ù„Ù…ØØªÙˆÙ‰ القابل للتنزيل</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>إزالة الإدخال</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>تمت الإزالة بنجاØ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>تمت إزالة اللعبة الأساسية المثبتة بنجاØ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>تمت إزالة Ø§Ù„ØªØØ¯ÙŠØ« المثبت بنجاØ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>لا يوجد ØªØØ¯ÙŠØ« مثبت لهذا العنوان.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>مثبت لهذا العنوان DLC لا يوجد أي Ù…ØØªÙˆÙ‰ قابل للتنزيل.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>إزالة تكوين اللعبة المخصصة؟</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>إزالة تخزين ذاكرة التخزين المؤقت؟</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>إزالة الملÙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>إزالة بيانات زمن اللعب</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>إعادة تعيين زمن اللعب؟</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>ØØ¯Ø« خطأ أثناء إزالة التكوين المخصص</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>لا يوجد تكوين مخصص لهذا العنوان.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>تمت إزالة تكوين اللعبة المخصص بنجاØ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>ÙØ´Ù„ إزالة تكوين اللعبة المخصص.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>كامل</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>إلغاء</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>أكتملت العملية بنجاØ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>لا يمكن إجراء التØÙ‚Ù‚ من سلامة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>لم يتم التØÙ‚Ù‚ من ØµØØ© Ù…ØØªÙˆÙŠØ§Øª الملÙ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>ÙØ´Ù„ التØÙ‚Ù‚ من سلامة</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>قد تكون Ù…ØØªÙˆÙŠØ§Øª Ø§Ù„Ù…Ù„Ù ØªØ§Ù„ÙØ©.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>التØÙ‚Ù‚ من سلامة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Ù†Ø¬Ø Ø§Ù„ØªØÙ‚Ù‚ من سلامة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>ÙØ´Ù„ التØÙ‚Ù‚ من سلامة</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>قد تكون Ù…ØØªÙˆÙŠØ§Øª Ø§Ù„Ù…Ù„Ù ØªØ§Ù„ÙØ©.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>إنشاء إختصار</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>%1 تم إنشاء اختصار Ø¨Ù†Ø¬Ø§Ø Ø¥Ù„Ù‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>إنشاء أيقونة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>%1 خطأ ÙÙŠ ÙØªØ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>ØØ¯Ø¯ المجلد</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>خصائص</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>تعذر تØÙ…يل خصائص اللعبة.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>تشغيل المÙÙ„ÙŽÙÙ‘</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>تم ØªØØ¯ÙŠØ¯ مجلد غير صالØ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>لا ÙŠØØªÙˆÙŠ Ø§Ù„Ù…Ø¬Ù„Ø¯ الذي ØØ¯Ø¯ØªÙ‡ على مل٠رئيسي</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>تثبيت Ø§Ù„Ù…Ù„ÙØ§Øª</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>"%1" تثبيت الملÙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>تثبيت النتائج</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>تطبيق النظام</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>أرشي٠النظام</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>ØªØØ¯ÙŠØ« تطبيق النظام</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>اللعبة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>ØªØØ¯ÙŠØ« اللعبة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>ÙØ´Ù„ ÙÙ‰ التثبيت</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>لم يتم العثور على الملÙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>مواÙÙ‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>لم يتم Ø§Ø³ØªÙŠÙØ§Ø¡ متطلبات الأجهزة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>ØØ³Ø§Ø¨ يوزو Ù…Ùقود</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>خطأ ÙÙŠ ÙØªØ URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>الكتابة Ùوق مل٠اللاعب 1ØŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>تم اكتشا٠تكوين غير صالØ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>أميبو</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>أميبو اللعبة Ø§Ù„ØØ§Ù„ية تمت إزالته</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>خطأ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>اللعبة Ø§Ù„ØØ§Ù„ية لا ØªØ¨ØØ« عن أميبو</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>تØÙ…يل أميبو</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>خطأ أثناء تØÙ…يل بيانات أميبو</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Ø§Ù„Ù…Ù„Ù Ø§Ù„Ù…ØØ¯Ø¯ ليس مل٠أميبو صالØÙ‹Ø§</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Ø§Ù„Ù…Ù„Ù Ø§Ù„Ù…ØØ¯Ø¯ قيد الاستخدام Ø¨Ø§Ù„ÙØ¹Ù„</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>ØØ¯Ø« خطأ غير معروÙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>لا توجد برامج ثابتة Ù…ØªØ§ØØ©</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>الرجاء تثبيت البرنامج الثابت لاستخدام التطبيق الصغير للألبوم.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>التطبيق الصغير للألبوم</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>التطبيق الصغير للألبوم غير Ù…ØªÙˆÙØ±. الرجاء إعادة تثبيت البرامج الثابتة.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>الرجاء تثبيت البرنامج الثابت لاستخدام برنامج الخزانة.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>التطبيق الصغير للخزانة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>التطبيق الصغير للخزانة غير Ù…ØªÙˆÙØ±. الرجاء إعادة تثبيت البرامج الثابتة.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Mii الرجاء تثبيت البرنامج الثابت لاستخدام Ù…ØØ±Ø±</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Mii ØªØØ±ÙŠØ± التطبيق الصغير</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>تطبيق التØÙƒÙ…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>قائمة التØÙƒÙ… غير Ù…ØªÙˆÙØ±Ø©. الرجاء إعادة تثبيت ÙØ±ÙŠÙ…وير</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>لقطة شاشة</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&إيقا٠التشغيل</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&بدء</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>&إيقا٠التسجيل</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>&تسجيل</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>الصوت: كتم الصوت</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <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="4788"/> - <source>Deriving Keys</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>ÙØ´Ù„ ÙÙƒ تشÙير أرشي٠النظام</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>هل أنت متأكد أنك تريد إغلاق يوزو؟</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>يوزو</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6146,62 +6102,62 @@ Would you like to bypass this and exit anyway?</source> <translation>خصائص</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Ù…Ø³Ø Ø§Ù„Ù…Ù„ÙØ§Øª الداخلية</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>إزالة مجلد اللعبة</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² نقل للأعلى</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ نقل للأسÙÙ„</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>ÙØªØ موقع المجلد</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>مسØ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>الاسم</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>التواÙÙ‚</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Ø§Ù„Ø¥Ø¶Ø§ÙØ§Øª</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>نوع الملÙ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Ø§Ù„ØØ¬Ù…</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>زمن اللعب</translation> </message> @@ -6272,7 +6228,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>انقر نقرًا مزدوجًا Ù„Ø¥Ø¶Ø§ÙØ© مجلد جديد إلى قائمة الألعاب</translation> </message> @@ -6285,12 +6241,12 @@ Would you like to bypass this and exit anyway?</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>:مرشØ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>أدخل نمط للمرشØ</translation> </message> @@ -6801,176 +6757,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&إعادة تهيئة Ø§Ù„Ù…ÙØ§ØªÙŠØ</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>التØÙ‚Ù‚ من Ø§Ù„Ù…ØØªÙˆÙŠØ§Øª المثبتة</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&ØÙˆÙ„ يوزو</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>وضع Ø§Ù„Ù†Ø§ÙØ°Ø© Ø§Ù„ÙˆØ§ØØ¯Ø©</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>&الإعدادات</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>عرض &شريط المرشØ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>عرض &شريط Ø§Ù„ØØ§Ù„Ø©</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>عرض شريط Ø§Ù„ØØ§Ù„Ø©</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&استعراض ردهة الألعاب العامة</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&إنشاء ØºØ±ÙØ©</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&مغادرة Ø§Ù„ØºØ±ÙØ©</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&الاتصال المباشر Ø¨Ø§Ù„ØºØ±ÙØ©</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&عرض Ø§Ù„ØºØ±ÙØ© Ø§Ù„ØØ§Ù„ية</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>&ملء الشاشة</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&إعادة التشغيل</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>تØÙ…يل/إزالة &أميبو</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&تقرير التواÙÙ‚</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>ÙØªØ ØµÙØØ© &التعديلات</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>ÙØªØ دليل البدء السريع</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&التعليمات</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>ÙØªØ مجلد &يوزو</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&التقاط لقطة للشاشة</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>ÙØªØ الألبوم</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&تعيين الاسم المستعار والمالك</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>ØØ°Ù بيانات اللعبة</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&استعادة أميبو</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>&تنسيق أميبو</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>Mii ÙØªØ Ù…ØØ±Ø±</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>إعدادات &اللعبة Ø§Ù„ØØ§Ù„ية</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&بدء</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&إعادة تعيين</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>&تسجيل</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>ÙØªØ قائمة التØÙƒÙ…</translation> </message> diff --git a/dist/languages/ca.ts b/dist/languages/ca.ts index afa32debf..b327312bd 100644 --- a/dist/languages/ca.ts +++ b/dist/languages/ca.ts @@ -378,17 +378,17 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="31"/> <source>Output Device:</source> - <translation type="unfinished"/> + <translation>Dispositiu de Sortida:</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="32"/> <source>Input Device:</source> - <translation type="unfinished"/> + <translation>Dispositiu d'Entrada:</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="33"/> <source>Mute audio</source> - <translation type="unfinished"/> + <translation>Silenciar à udio</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="34"/> @@ -443,7 +443,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="59"/> <source>This option improves the speed of some approximate floating-point functions by using less accurate native approximations.</source> - <translation type="unfinished"/> + <translation>Aquest parà metre millora la velocitat d'algunes funcions de coma flotant, amb l'ús d'aproximacions natives menys precises.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="62"/> @@ -673,763 +673,763 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="145"/> <source>Device Name</source> - <translation type="unfinished"/> + <translation>Nom del Dispositiu</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC personalitzat</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Nota: això pot anul·lar-se quan la configuració de regió es selecciona automà ticament</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Regió:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Zona horà ria:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Sol·licitar l'usuari en l'arrencada del joc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Pausa l'emulació quan la finestra està en segon pla</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Ocultar el cursor del ratolà en cas d'inactivitat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> - <translation type="unfinished"/> + <translation>Activa el mode Joc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly Shaders, només NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>PrecÃs</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Insegur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoic (desactiva la majoria d'optimitzacions)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Finestra sense vores</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Pantalla completa exclusiva</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Sense sortida de vÃdeo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Descodificació de vÃdeo a la CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Descodificació de vÃdeo a la GPU (Valor Predeterminat)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Veà més proper</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilineal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicúbic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussià </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Cap</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Valor predeterminat (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Forçar 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Forçar 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Estirar a la finestra</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automà tic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Valor predeterminat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japonès (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Francès (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Alemany (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italià (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Castellà (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Xinès</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Coreà (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Holandès (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portuguès (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Rus (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanès</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Anglès brità nic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Francès canadenc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Espanyol llatinoamericà </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Xinès simplificat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Xinès tradicional (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Portuguès brasiler (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japó</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>EUA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Austrà lia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Xina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Corea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Auto (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Per defecte (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egipte</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hong Kong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islà ndia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Isreal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>LÃbia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polònia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turquia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Estèreo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Envoltant</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Acoblada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Portà til</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> - <translation type="unfinished"/> + <translation>Tan sols si el joc especifica no parar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2308,33 +2308,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Color de fons:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Apagat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Vsync Apagat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Recomanat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Encés</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync Encés</translation> </message> @@ -3400,6 +3400,15 @@ Per invertir els eixos, primer moveu el joystick verticalment i després horitzo </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3734,42 +3743,47 @@ Current values are %1% and %2% respectively.</source> <translation>Algunes configuracions són disponibles només quan el joc no està corrent.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Complements</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Sistema</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grà fics</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Grà fics avanç.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Àudio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Perfils d'entrada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Propietats</translation> </message> @@ -3873,67 +3887,67 @@ Current values are %1% and %2% respectively.</source> <translation>Introdueixi un nom d'usuari per al nou usuari:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Introdueixi un nou nom d'usuari:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Seleccioni una imatge d'usuari</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Imatges JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Error al eliminar la imatge</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Error al intentar sobreescriure la imatge anterior a: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Error al eliminar el fitxer</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>No es pot eliminar el fitxer existent: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Error al crear el directori d'imatges de l'usuari</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>No es pot crear el directori %1 per emmagatzemar imatges d’usuari.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Error al copiar la imatge de l'usuari</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>No es pot copiar la imatge de %1 a %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Error al redimensionar la imatge d'usuari</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>No es pot redimensionar la imatge</translation> </message> @@ -3941,17 +3955,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Esborrar aquest usuari? Totes les dades de guardat seran eliminades.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Confirmar eliminació</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Nom: %1 @@ -4105,7 +4119,7 @@ UUID: %2</translation> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Alerta: "%1" no és un llenguatge và lid per la regió "%2"</translation> </message> @@ -4817,601 +4831,601 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Carregant Web applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Desactivar el Web Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <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="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> - <translation type="unfinished"/> + <translation>Silenciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Esborrar arxius recents</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pausar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Advertència format del joc desfasat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Error carregant la ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>S'està tancant el programari</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Dades de partides guardades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Dades de mods</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Error obrint la carpeta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>La carpeta no existeix!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Error eliminant continguts</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Error eliminant actualització</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Error eliminant DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Eliminar entrada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>S'ha eliminat correctament</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <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="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <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="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <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="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <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="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Desitja eliminar la configuració personalitzada del joc?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Eliminar arxiu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Error eliminant la configuració personalitzada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>La extracció de RomFS ha fallat!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Completa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Esquelet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Seleccioni el mode de bolcat de RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Extraient RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Cancel·la</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Extracció de RomFS completada correctament!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>L'operació s'ha completat correctament.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> - <translation type="unfinished"/> + <translation>Crear icona</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Error obrint %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Seleccionar directori</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Propietats</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Carregar arxiu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Obrir el directori de la ROM extreta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Directori seleccionat invà lid</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Instal·lar arxius</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Instal·lant arxiu "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Resultats instal·lació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n nou(s) arxiu(s) s'ha(n) instal·lat @@ -5419,7 +5433,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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n arxiu(s) s'han sobreescrit @@ -5427,7 +5441,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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n arxiu(s) no s'han instal·lat @@ -5435,485 +5449,419 @@ 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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Aplicació del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Arxiu del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Actualització de l'aplicació del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Paquet de firmware (Tipus A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Paquet de firmware (Tipus B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Joc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Actualització de joc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC del joc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>TÃtol delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Seleccioni el tipus d'instal·lació NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Ha fallat la instal·lació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Arxiu no trobat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Arxiu "%1" no trobat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>D'acord</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Falta el compte de yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Error obrint URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Gravació TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Sobreescriure l'arxiu del jugador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Configuració invà lida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <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="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Arxiu Amiibo (%1);; Tots els Arxius (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Carregar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Error al carregar les dades d'Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> - <translation type="unfinished"/> + <translation>L'arxiu seleccionat no és un amiibo và lid</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Controlador Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Captura de pantalla</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Imatge PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Estat TAS: executant %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Estat TAS: gravant %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Estat TAS: inactiu %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Estat TAS: invà lid</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Parar l'execució</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Parar g&ravació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>G&ravar</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Velocitat: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Velocitat: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Joc: %1 FPS (desbloquejat)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Joc: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Fotograma: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>SENSE AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Confirmi la clau de rederivació</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Està a punt de forçar la rederivació de totes les seves claus. -Si no sap què és això, o què està fent, -aquesta és una acció potencialment destructiva. -Si us plau, asseguris de que això és el que vol -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="4762"/> - <source>Missing fuses</source> - <translation>Falten fusibles</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - Falta BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Falta BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Falta PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Falten components de derivació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Derivant claus ... -Això pot prendre fins a un minut depenent -del rendiment del seu sistema.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Derivant claus</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <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="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6191,62 +6139,62 @@ Desitja tancar-lo de totes maneres?</translation> <translation>Propietats</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Escanejar subdirectoris</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Eliminar directori de jocs</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Moure amunt</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Move avall</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Obre ubicació del directori</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Esborrar</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nom</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Compatibilitat</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Complements</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Tipus d'arxiu</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Mida</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6317,7 +6265,7 @@ Desitja tancar-lo de totes maneres?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Faci doble clic per afegir un nou directori a la llista de jocs</translation> </message> @@ -6330,12 +6278,12 @@ Desitja tancar-lo de totes maneres?</translation> <translation><numerusform>%1 de %n resultat(s)</numerusform><numerusform>%1 de %n resultat(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filtre:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Introdueixi patró per a filtrar</translation> </message> @@ -6345,12 +6293,12 @@ Desitja tancar-lo de totes maneres?</translation> <message> <location filename="../../src/yuzu/multiplayer/host_room.ui" line="14"/> <source>Create Room</source> - <translation type="unfinished"/> + <translation>Crear sala</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/host_room.ui" line="37"/> <source>Room Name</source> - <translation type="unfinished"/> + <translation>Nom de la sala</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/host_room.ui" line="51"/> @@ -6360,7 +6308,7 @@ Desitja tancar-lo de totes maneres?</translation> <message> <location filename="../../src/yuzu/multiplayer/host_room.ui" line="61"/> <source>Max Players</source> - <translation type="unfinished"/> + <translation>Nombre mà xim de jugadors</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/host_room.ui" line="91"/> @@ -6699,7 +6647,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="218"/> <source>Room Name</source> - <translation type="unfinished"/> + <translation>Nom de la sala</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="219"/> @@ -6846,176 +6794,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Reinicialitzar claus...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Sobre yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Mode una sola &finestra</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Con&figurar...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Mostrar complements de capçalera del D&ock</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Mostrar la barra de &filtre</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Mostrar la barra d'&estat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Mostrar barra d'estat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>P&antalla completa</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Reiniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Carregar/Eliminar &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Informar de compatibilitat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Obrir la pà gina de &mods</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Obre la guia d'&inici rà pid</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&Preguntes freqüents</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Obrir la carpeta de &yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Captura de pantalla</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Configurar TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Configurar joc a&ctual...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Reiniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>E&nregistrar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> @@ -7121,7 +7064,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="11"/> <source>Username is not valid. Must be 4 to 20 alphanumeric characters.</source> - <translation type="unfinished"/> + <translation>El nom d'usuari no és và lid. Hauria de contenir entre 4 i 20 carà cters alfanumèrics.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="13"/> @@ -7131,7 +7074,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="15"/> <source>Username is already in use or not valid. Please choose another.</source> - <translation type="unfinished"/> + <translation>El nom d'usuari ja és en ús o no és và lid. Si us plau, seleccioni un altre.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="17"/> @@ -7181,7 +7124,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="39"/> <source>Incorrect password.</source> - <translation type="unfinished"/> + <translation>Contrasenya incorrecta.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="40"/> @@ -7726,7 +7669,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="169"/> <source>Amiibo Info</source> - <translation type="unfinished"/> + <translation>Informació de l'Amiibo</translation> </message> <message> <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="177"/> @@ -7761,7 +7704,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="290"/> <source>Creation Date</source> - <translation type="unfinished"/> + <translation>Data de Creació</translation> </message> <message> <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="307"/> @@ -8180,7 +8123,7 @@ Si us plau, intenti-ho de nou o contacti el desenvolupador del programari.</tran <message> <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> <source>Select a user to link to a Nintendo Account.</source> - <translation type="unfinished"/> + <translation>Selecciona un usuari a vincular a un compte de Nintendo.</translation> </message> <message> <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> @@ -8195,7 +8138,7 @@ Si us plau, intenti-ho de nou o contacti el desenvolupador del programari.</tran <message> <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> <source>Which user will be transferred to another console?</source> - <translation type="unfinished"/> + <translation>Quin usuari serà transferit a una altra consola?</translation> </message> <message> <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="224"/> diff --git a/dist/languages/cs.ts b/dist/languages/cs.ts index 49fa7cf63..7a23f43db 100644 --- a/dist/languages/cs.ts +++ b/dist/languages/cs.ts @@ -677,759 +677,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Vlastnà RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Jazyk:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Pozn.: tohle se může pÅ™emazat když se region vybÃrá automaticky</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Region:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>ÄŒasové Pásmo:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Zeptat se na uživatele pÅ™i spuÅ¡tÄ›nà hry</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Pozastavit emulaci, když je aplikace v pozadÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Potvrzenà pÅ™ed zastavenÃm emulace</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Skrýt myÅ¡ pÅ™i neaktivitÄ›</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>NormálnÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Vysoká</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>ExtrémnÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Automatické</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>PÅ™esné</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>NebezpeÄné</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoidnà (zakáže vÄ›tÅ¡inu optimizacÃ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Okno bez okrajů</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>ExkluzivnÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>BilineárnÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Žádné</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Výchozà (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Vynutit 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Vynutit 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Roztáhnout podle okna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>VýchozÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>JaponÅ¡tina (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>FrancouzÅ¡tina (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>NemÄina (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>ItalÅ¡tina (Italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Å panÄ›lÅ¡tina (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>ÄŒÃnÅ¡tina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>KorejÅ¡tina (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>HolandÅ¡tina (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>PortugalÅ¡tina (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>RuÅ¡tina (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>TajwanÅ¡tina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Britská AngliÄtina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Kanadská FrancouzÅ¡tina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Latinsko Americká Å panÄ›lÅ¡tina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>ZjednoduÅ¡ená ÄŒÃnÅ¡tina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>TradiÄnà ČÃnÅ¡tina (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Brazilská PortugalÅ¡tina (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japonsko</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Evropa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Austrálie</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>ÄŒÃna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egypt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Island</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamajka</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Lybie</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polsko</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugalsko</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turecko</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>UniverzálnÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Zadokovaná</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>PÅ™ÃruÄnÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Vždy se zeptat (VýchozÃ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2300,33 +2300,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Barva PozadÃ:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation type="unfinished"/> </message> @@ -3392,6 +3392,15 @@ Pro pÅ™evrácenà os nejprve posuňte joystick vertikálnÄ›, poté horizontálnÄ </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3726,42 +3735,47 @@ Current values are %1% and %2% respectively.</source> <translation>NÄ›která nastavenà jsou dostupná pouze, pokud hra neběžÃ.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Doplňky</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Systém</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>PokroÄ. grafika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Zvuk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Profily Vstupu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Vlastnosti</translation> </message> @@ -3865,67 +3879,67 @@ Current values are %1% and %2% respectively.</source> <translation>Zadejte pÅ™ezdÃvku pro nového uživatele:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Zadejte novou pÅ™ezdÃvku:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Vyberte obrázek uživatele</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Obrázek JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Chyba pÅ™i odstraňovánà obrázku</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Chyba pÅ™i pÅ™episovánà pÅ™edchozÃho obrázku na: %1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Chyba pÅ™i odstraňovánà souboru</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Nelze odstranit existujÃcà soubor: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Chyba pÅ™i vytvářenà složky s obrázkem uživatele</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Nelze vytvoÅ™it složku %1 pro ukládánà obrázků uživatele.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Chyba pÅ™i kopÃrovánà obrázku uživatele</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Nelze zkopÃrovat obrázek z %1 do %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation type="unfinished"/> </message> @@ -3933,17 +3947,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Odstranit tohoto uživatele? VÅ¡echna jeho uložená data budou smazána.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Potvrdit smazánÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation type="unfinished"/> @@ -4096,7 +4110,7 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4808,1096 +4822,1030 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>NaÄÃtánà Web Appletu...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Zakázat Web Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Vypnout ztlumenÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Ztlumit</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Vymazat poslednà soubory</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&PokraÄovat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pauza</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Varovánà Zastaralý Formát Hry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Chyba pÅ™i naÄÃtánà ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>UkonÄovánà softwaru...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Uložit data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Módovat Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Chyba otevÃránà složky %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Složka neexistuje!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Odebrat položku</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>ÚspěšnÄ› odebráno</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>ÚspěšnÄ› odebrána nainstalovaná aktualizace.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Odstranit vlastnà konfiguraci hry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Odstranit soubor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>Odstranit data o dobÄ› hranÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>Resetovat dobu hranÃ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <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="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Extrakce RomFS se nepovedla!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Plný</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Kostra</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Vyber RomFS Dump Mode</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Extrahuji RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Extrakce RomFS se povedla!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Operace byla dokonÄena úspěšnÄ›.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> + <translation>Ověřovánà integrity...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> - <translation>Ověřovánà integrity...</translation> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>VytvoÅ™it Zástupce</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>ÚspěšnÄ› vytvoÅ™en zástupce do %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>NepodaÅ™ilo se vytvoÅ™it zástupce do %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>VytvoÅ™it Ikonu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Chyba pÅ™i otevÃránà %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Vybraná Složka</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Vlastnosti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>NaÄÃst soubor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>OtevÅ™Ãt složku s extrahovanou ROM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Vybraná složka je neplatná</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Instalovat Soubory</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Instalovánà souboru "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Výsledek instalace</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Systémová Aplikace</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Systémový archÃv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Systémový Update Aplikace</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Firmware-ový baliÄek (Typu A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Firmware-ový baliÄek (Typu B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Hra</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Update Hry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Hernà DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta Title</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Vyberte typ instalace NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Chyba v instalaci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Soubor nenalezen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Soubor "%1" nenalezen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Chybà úÄet yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Chyba pÅ™i otevÃránà URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Nelze otevÅ™Ãt URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>ZjiÅ¡tÄ›no neplatné nastavenÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Soubor Amiibo (%1);; VÅ¡echny Soubory (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>NaÄÃst Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Chyba naÄÃtánà Amiiba</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>Nenà k dispozici žádný firmware</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet ovladaÄe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>PoÅ™Ãdit SnÃmek Obrazovky</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG Image (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>BudovánÃ: %n shader</numerusform><numerusform>BudovánÃ: %n shadery</numerusform><numerusform>BudovánÃ: %n shaderů</numerusform><numerusform>BudovánÃ: %n shaderů</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>MěřÃtko: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Rychlost: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Rychlost: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Hra: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>ŽÃDNà AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>HLASITOST: ZTLUMENO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>HLASITOST: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>PotvÄte Rederivaci KlÃÄů</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Hodláte se vynutit rederivaci vÅ¡ech vaÅ¡ich klÃÄů. -Pokud nevÃte co tohle znamená, nebo co dÄ›láte, -tak se jedná o potencionálnÄ› destruktivnà akci. -ProsÃm ověřte si, že se jedná o to co chcete -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="4762"/> - <source>Missing fuses</source> - <translation>Chybà Fuses</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- Chybà BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Chybà BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Chybà PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Chybé odvozené komponenty</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Derivuji klÃÄe... -Tohle může zabrat až minutu -podle výkonu systému.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Derivuji KlÃÄe</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Vyberte CÃl vypsanà RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6175,62 +6123,62 @@ Opravdu si pÅ™ejete ukonÄit tuto aplikaci?</translation> <translation>Vlastnosti</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Prohledat podsložky</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Odstranit složku se hrou</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Posunout nahoru</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Posunout dolů</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>OtevÅ™Ãt umÃstÄ›nà složky</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Vymazat</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Název</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatibilita</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Modifkace</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Typ-Souboru</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Velikost</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>Doba hranÃ</translation> </message> @@ -6301,7 +6249,7 @@ Opravdu si pÅ™ejete ukonÄit tuto aplikaci?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Dvojitým kliknutÃm pÅ™idáte novou složku do seznamu her</translation> </message> @@ -6314,12 +6262,12 @@ Opravdu si pÅ™ejete ukonÄit tuto aplikaci?</translation> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filtr:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Zadejte filtr</translation> </message> @@ -6829,176 +6777,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Znovu inicializovat klÃÄe...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>&Ověřit Nainstalovaný Obsah</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>O &aplikaci yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>&Režim jednoho okna</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>&NastavenÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Zobrazit záhlavà widgetů d&oku</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Zobrazit &filtrovacà panel</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Zobrazit &stavový řádek</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Zobrazit Staus Bar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&VytvoÅ™it MÃstnost</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Opustit MÃstnost</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>&Celá obrazovka</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Restartovat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Nahlásit kompatibilitu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>OtevÅ™Ãt stránku s &modifikacemi</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>OtevÅ™Ãt &rychlého průvodce</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>ÄŒasto &kladené otázky</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>OtevÅ™Ãt složku s &yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>Za&chytit snÃmek obrazovky</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>OtevÅ™Ãt &Album</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&Nastavit PÅ™ezdÃvku a VlastnÃka</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>&Odstranit Hernà Data</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&Obnovit Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>OtevÅ™Ãt &Mii Editor</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Nastavenà souÄasné hry</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Resetovat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>OtevÅ™Ãt &Menu OvladaÄe</translation> </message> diff --git a/dist/languages/da.ts b/dist/languages/da.ts index 67dd08222..8526a9dbc 100644 --- a/dist/languages/da.ts +++ b/dist/languages/da.ts @@ -679,759 +679,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Tilpasset RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Bemærk: Dette kan overskrives, nÃ¥r regionsindstillinger er sat til automatisk valg</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Region</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Tidszone</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Spørg efter bruger, ved opstart af spil</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Sæt emulering pÃ¥ pause, nÃ¥r i baggrund</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Skjul mus ved inaktivitet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly-Shadere, kun NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Automatisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Nøjagtig</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Usikker</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (deaktiverer de fleste optimeringer)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Uindrammet Vindue</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Eksklusiv Fuld Skærm</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Ingen Video-Output</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU-Video Afkodning</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU-Video Afkodning (Standard)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0,75X (540p/810p) [EKSPERIMENTEL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nærmeste Nabo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilineær</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bikubisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gausisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Ingen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Standard (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Tving 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Tving 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Stræk til Vindue</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Standard</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japansk (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Fransk (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Tysk (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italiensk (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spansk (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Kinesisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Koreansk (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Hollandsk (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugisisk (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russisk (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanesisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Britisk Engelsk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Candadisk Fransk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Latinamerikansk Spansk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Forenklet Kinesisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Traditionelt Kinesisk (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Braziliansk Portugisisk (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australien</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Kina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Ægypten</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Island</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libyen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Tyrkiet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Dokket</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>HÃ¥ndholdt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2308,33 +2308,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Baggrundsfarve:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation type="unfinished"/> </message> @@ -3400,6 +3400,15 @@ Bevæg, for at omvende akserne, først din styrepind lodret og sÃ¥ vandret.</tra </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3734,42 +3743,47 @@ Current values are %1% and %2% respectively.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Tilføjelser</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>System</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Lyd</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Egenskaber</translation> </message> @@ -3873,67 +3887,67 @@ Current values are %1% and %2% respectively.</source> <translation>Indtast et brugernavn for den nye bruger:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Indtast et nyt brugernavn:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Vælg Brugerbillede</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG-Billeder (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Fejl ved sletning af billede</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Der skete en fejl, ved forsøg pÃ¥ at overskrive forrige billede pÃ¥: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Fejl ved sletning af fil</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Kan ikke slette eksisterende fil: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Fejl ved oprettelse af brugerbillede-mappe</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Ude af stand til, at oprette mappe %1, til lagring af brugerbilleder.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Fejl ved kopiering af brugerbillede</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Ude af stand til, at kopiere billede fra %1 til %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation type="unfinished"/> </message> @@ -3941,17 +3955,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Bekræft Slet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation type="unfinished"/> @@ -4104,7 +4118,7 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4816,1086 +4830,1028 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Indlæser Net-Applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Deaktivér Net-Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Advarsel, Forældet Spilformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Fejl under indlæsning af ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>ROM-formatet understøttes ikke.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Fejl ved Ã…bning af %1 Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Mappe eksisterer ikke!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS-Udpakning Mislykkedes!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Fuld</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Skelet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Vælg RomFS-Nedfældelsestilstand</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Udpakker RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Afbryd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS-Udpakning Lykkedes!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Fuldførelse af opgaven lykkedes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Fejl ved Ã…bning af %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Vælg Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Egenskaber</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Indlæs Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Ã…bn Udpakket ROM-Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Ugyldig Mappe Valgt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Installér fil "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Systemapplikation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Systemarkiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Systemapplikationsopdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Firmwarepakke (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Firmwarepakke (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Spil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Spilopdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Spiludvidelse</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta-Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Vælg NCA-Installationstype...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Installation mislykkedes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Fil ikke fundet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Fil "%1" ikke fundet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Manglende yuzu-Konto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo-Fil (%1);; Alle Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Indlæs Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Fejl ved indlæsning af Amiibo-data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Optag Skærmbillede</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG-Billede (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Hastighed: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Hastighed: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Spil: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Billede: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <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="4788"/> - <source>Deriving Keys</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6171,62 +6127,62 @@ Would you like to bypass this and exit anyway?</source> <translation>Egenskaber</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Ryd</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Navn</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatibilitet</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Tilføjelser</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Filtype</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Størrelse</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6297,7 +6253,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation type="unfinished"/> </message> @@ -6310,12 +6266,12 @@ Would you like to bypass this and exit anyway?</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filter:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation type="unfinished"/> </message> @@ -6825,176 +6781,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Vis Statuslinje</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/de.ts b/dist/languages/de.ts index 9e8537128..bfee1983e 100644 --- a/dist/languages/de.ts +++ b/dist/languages/de.ts @@ -683,759 +683,759 @@ Compute-Pipelines sind für alle anderen Treiber immer aktiviert.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Benutzerdefinierte Echtzeituhr</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Sprache:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Anmerkung: Diese Einstellung kann überschrieben werden, falls deine Region auf "auto-select" eingestellt ist.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Region:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Zeitzone:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Tonausgangsmodus:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>Konsolenmodus:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Beim Spielstart nach Nutzer fragen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Emulation im Hintergrund pausieren</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Vor dem Stoppen der Emulation bestätigen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Mauszeiger verstecken</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Deaktiviere Controller-Applet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>GameMode aktivieren</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU Asynchron</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Unkomprimiert (Beste Qualität)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Niedrige Qualität)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Mittlere Qualität)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly Shaders, Nur NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Experimentell, Nur Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Hoch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Extrem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Akkurat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Unsicher</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (deaktiviert die meisten Optimierungen)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>Dynarmic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Rahmenloses Fenster</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Exklusiver Vollbildmodus</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Keine Videoausgabe</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU Video Dekodierung</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU Video Dekodierung (Standard)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0,5X (360p/540p) [EXPERIMENTELL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0,75X (540p/810p) [EXPERIMENTELL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1,5X (1080p/1620p) [EXPERIMENTELL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest-Neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bikubisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussian</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Keiner</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Standard (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Erzwinge 4:3 </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Erzwinge 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Erzwinge 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Auf Fenster anpassen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automatisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Standard</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japanisch (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Amerikanisches Englisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Französisch (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Deutsch (German)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italienisch (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spanisch (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Chinesisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Koreanisch (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Niederländisch (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugiesisch (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russisch (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanesisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Britisches Englisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Kanadisches Französisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Lateinamerikanisches Spanisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Vereinfachtes Chinesisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Traditionelles Chinesisch (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Brasilianisches Portugiesisch (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australien</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>China</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Automatisch (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Standard (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Kuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Ägypten</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Island</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libyen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Türkei</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (Standard)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (Unsicher)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (Unsicher)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Im Dock</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Handheld</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Immer fragen (Standard)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Nur wenn ein Spiel vorgibt, nicht zu stoppen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>Niemals fragen</translation> </message> @@ -2313,33 +2313,33 @@ Compute-Pipelines sind für alle anderen Treiber immer aktiviert.</translation> <translation>Hintergrundfarbe:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Aus</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Vsync Aus</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Empfohlen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>An</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>Vsync An</translation> </message> @@ -3405,6 +3405,15 @@ Um die Achsen umzukehren, bewege den Joystick zuerst vertikal und dann horizonta </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3740,42 +3749,47 @@ Aktuell liegen die Werte bei %1% bzw. %2%.</translation> <translation>Einige Einstellungen sind nur verfügbar, wenn kein Spiel aktiv ist.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Add-Ons</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>System</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Erw. Grafik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Eingabe-Profile</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Einstellungen</translation> </message> @@ -3879,67 +3893,67 @@ Aktuell liegen die Werte bei %1% bzw. %2%.</translation> <translation>Gib einen Benutzernamen für den neuen Benutzer ein:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Gib einen neuen Nutzernamen ein:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Profilbild wählen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG Bilddateien (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Fehler beim Löschen des Bildes</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Fehler beim Überschreiben des vorherigen Bildes bei: %1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Fehler beim Löschen der Datei</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Konnte die bestehende Datei "%1" nicht löschen.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Fehler beim Erstellen des Ordners für die Profilbilder</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Konnte Ordner "%1" nicht erstellen, um Profilbilder zu speichern.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Fehler beim Kopieren des Profilbildes</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Das Bild konnte nicht von "%1" nach "%2" kopiert werden</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation> Fehler bei der Größenänderung des Benutzerbildes</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Die Bildgröße kann nicht angepasst werden.</translation> </message> @@ -3947,17 +3961,17 @@ Aktuell liegen die Werte bei %1% bzw. %2%.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Diesen Benutzer löschen? Alle Speicherdaten des Benutzers werden gelöscht.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Löschen bestätigen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Name: %1 @@ -4111,7 +4125,7 @@ UUID: %2</translation> <translation>Kern</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Achtung: "%1" ist keine valide Sprache für die Region "%2"</translation> </message> @@ -4823,603 +4837,603 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetrie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Defekte Vulkan-Installation erkannt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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 Initialisierung fehlgeschlagen.<br><br>Klicken Sie auf <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>für Instruktionen zur Problembehebung.</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Spiel wird ausgeführt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Lade Web-Applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Deaktiviere die Web Applikation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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>Deaktivieren des Web-Applets kann zu undefiniertem Verhalten führen, und sollte nur mit Super Mario 3D All-Stars benutzt werden. Bist du sicher, dass du das Web-Applet deaktivieren möchtest? (Dies kann in den Debug-Einstellungen wieder aktiviert werden.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Der momentan ausgewählte Auflösungsskalierung Multiplikator.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Ton aktivieren</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Stummschalten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Ton zurücksetzen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Zuletzt geladene Dateien leeren</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Fortsetzen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pause</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Warnung veraltetes Spielformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>ROM konnte nicht geladen werden!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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 ist auf einen Fehler gestoßen beim Ausführen des Videokerns. Dies ist in der Regel auf veraltete GPU Treiber zurückzuführen, integrierte GPUs eingeschlossen. Bitte öffnen Sie die Log Datei für weitere Informationen. Für weitere Informationen wie Sie auf die Log Datei zugreifen, öffnen Sie bitte die folgende Seite: <a href='https://yuzu-emu.org/help/reference/log-files/'>Wie wird eine Log Datei hochgeladen?</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-Bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-Bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Schließe Software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Speicherdaten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod-Daten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Konnte Verzeichnis %1 nicht öffnen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Verzeichnis existiert nicht!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Fehler beim Entfernen des Inhalts</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Fehler beim Entfernen des Updates</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Fehler beim Entfernen des DLCs</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Installierten Spiele-Content entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Installierte Spiele-Updates entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Installierte Spiele-DLCs entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Eintrag entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Erfolgreich entfernt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>Das Spiel wurde entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>Das Update wurde entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 DLC entfernt. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Transferierbaren OpenGL Shader Cache löschen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Transferierbaren Vulkan Shader Cache löschen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Alle transferierbaren Shader Caches löschen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Spiel-Einstellungen entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Cache-Speicher entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Datei entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>Spielzeit-Daten enfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>Spielzeit zurücksetzen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>Fehler beim Entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <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="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <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="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>Die übertragbaren Shader-Caches wurden erfolgreich entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Entfernen des transferierbaren Shader-Cache-Verzeichnisses fehlgeschlagen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Fehler beim Entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>Die Spiel-Einstellungen wurden entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS-Extraktion fehlgeschlagen!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Komplett</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Nur Ordnerstruktur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>RomFS Extraktions-Modus auswählen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>RomFS wird extrahiert...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS wurde extrahiert!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Der Vorgang wurde erfolgreich abgeschlossen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>Integritätsüberprüfung konnte nicht durchgeführt werden!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>Datei-Inhalte wurden nicht auf Gültigkeit überprüft.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Integritätsüberprüfung fehlgeschlagen!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>Datei-Inhalte könnten defekt sein.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Überprüfe Integrität…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Integritätsüberprüfung erfolgreich!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Integritätsüberprüfung fehlgeschlagen!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Datei-Inhalte könnten defekt sein.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Verknüpfung erstellen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>Möchtest du das Spiel im Vollbild starten?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>Verknüpfung wurde erfolgreich erstellt unter %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Dies wird eine Verknüpfung zum aktuellen AppImage erstellen. Dies könnte nicht gut funktionieren falls du aktualisierst. Fortfahren?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>Erstellen einer Verknüpfung zu %1 fehlgeschlagen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Icon erstellen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Symboldatei konnte nicht erstellt werden. Der Pfad "%1" existiert nicht oder kann nicht erstellt werden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Fehler beim Öffnen von %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Verzeichnis auswählen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Einstellungen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Datei laden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Öffne das extrahierte ROM-Verzeichnis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Ungültiges Verzeichnis ausgewählt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Dateien installieren</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Datei "%1" wird installiert...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>NAND-Installation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n file was newly installed @@ -5427,7 +5441,7 @@ 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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n Datei wurde überschrieben @@ -5435,7 +5449,7 @@ 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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n Datei konnte nicht installiert werden @@ -5443,194 +5457,194 @@ Bitte nutze diese Funktion nur zum Installieren von Updates und DLC.</translatio </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Systemanwendung</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Systemarchiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Systemanwendungsupdate</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Firmware-Paket (Typ A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Firmware-Paket (Typ B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Spiel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Spiel-Update</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Spiel-DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta-Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Wähle den NCA-Installationstyp aus...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Installation fehlgeschlagen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Datei nicht gefunden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Datei "%1" nicht gefunden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Hardwareanforderungen nicht erfüllt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Dein System erfüllt nicht die empfohlenen Mindestanforderungen der Hardware. Meldung der Komptabilität wurde deaktiviert.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Fehlender yuzu-Account</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Fehler beim Öffnen der URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS Aufnahme</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Datei von Spieler 1 überschreiben?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Ungültige Konfiguration erkannt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Das aktuelle Amiibo wurde entfernt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo-Datei (%1);; Alle Dateien (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Amiibo laden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Fehler beim Laden der Amiibo-Daten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Ein unbekannter Fehler ist aufgetreten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5639,286 +5653,225 @@ Bitte nutze diese Funktion nur zum Installieren von Updates und DLC.</translatio %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>Keine Firmware verfügbar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>Bitte installiere die Firmware um das Album-Applet zu nutzen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>Album-Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>Album-Applet ist nicht verfügbar. Bitte Firmware erneut installieren.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>Bitte installiere die Firmware um das Cabinet-Applet zu nutzen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Cabinet-Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>Cabinet-Applet ist nicht verfügbar. Bitte Firmware erneut installieren.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Bitte installiere die Firmware um den Mii-Editor zu nutzen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Mii-Edit-Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>Mii-Editor ist nicht verfügbar. Bitte Firmware erneut installieren.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>Bitte installiere die Firmware um das Controller-Menü zu nutzen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Controller-Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>Controller-Menü ist nicht verfügbar. Bitte Firmware erneut installieren.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Screenshot aufnehmen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG Bild (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS Zustand: Läuft %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS Zustand: Aufnahme %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS-Status: Untätig %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS Zustand: Ungültig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Stoppe Ausführung</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Aufnahme stoppen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>Aufnahme</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>Erstelle: %n Shader</numerusform><numerusform>Erstelle: %n Shader</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Geschwindigkeit: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Geschwindigkeit: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Spiel: %1 FPS (Unbegrenzt)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Spiel: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>KEIN AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>LAUTSTÄRKE: STUMM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <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="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Schlüsselableitung bestätigen</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Du bist im Begriff, alle Schlüssel neu abzuleiten. Falls du nicht weißt, was das heißt oder was du hier tust, könnte dieser Prozess möglicherweise destruktiv sein. Bitte stelle sicher, dass du wirklich fortfahren willst und optional Sicherungen deiner Daten machst. - -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="4762"/> - <source>Missing fuses</source> - <translation>Fuses fehlen</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - BOOT0 fehlt</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - BCPKG2-1-Normal-Main fehlt</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - PRODINFO fehlt</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Derivationskomponenten fehlen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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>Die Verschlüsselungsschlüssel fehlen. <br>Bitte folgen Sie <a href='https://yuzu-emu.org/help/quickstart/'>dem Yuzu Schnellstart Guide</a> um ihre benötigten Schlüssel, Firmware und Spiele zu erhalten.<br><br><small>(%1)</small></translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Schlüssel werden abgeleitet... -Dies könnte, je nach Leistung deines Systems, bis zu einer Minute dauern.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Schlüsselableitung</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Die Systemarchiventschlüsselung ist gescheitert.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Verschlüsselungsschlüssel konnten die Firmware nicht entschlüsseln. <br>Bitte befolge <a href='https://yuzu-emu.org/help/quickstart/'>den yuzu-Quickstart-Guide</a> um alle deine Schlüssel (Keys), Firmware, und Spiele zu erhalten.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>RomFS wählen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6196,62 +6149,62 @@ Möchtest du dies umgehen und sie trotzdem beenden?</translation> <translation>Eigenschaften</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Unterordner scannen</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Spieleverzeichnis entfernen</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Nach Oben</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Nach Unten</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Verzeichnis öffnen</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Löschen</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatibilität</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Add-ons</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Dateityp</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Größe</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>Spielzeit</translation> </message> @@ -6322,7 +6275,7 @@ Möchtest du dies umgehen und sie trotzdem beenden?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Doppelklicke, um einen neuen Ordner zur Spieleliste hinzuzufügen.</translation> </message> @@ -6335,12 +6288,12 @@ Möchtest du dies umgehen und sie trotzdem beenden?</translation> <translation><numerusform>%1 von %n Ergebnis</numerusform><numerusform>%1 von %n Ergebnisse(n)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filter:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Wörter zum Filtern eingeben</translation> </message> @@ -6851,176 +6804,171 @@ Debug Nachricht:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Schlüssel neu initialisieren...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>Installierte Inhalte &überprüfen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Über yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>&Einzelfenster-Modus</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Kon&figurieren</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>D&ock-Widget-Header anzeigen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>&Filterleiste anzeigen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>&Statusleiste anzeigen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Statusleiste anzeigen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Öffentliche Spiele-Lobbys durchsuchen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Raum erstellen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Raum verlassen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Direkte Verbindung zum Raum</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Aktuellen Raum anzeigen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>Vollbild (&u)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>Neusta&rt</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>&Amiibo laden/entfernen...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Kompatibilität melden</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>&Mods-Seite öffnen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>&Schnellstart-Anleitung öffnen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>&yuzu-Verzeichnis öffnen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Bildschirmfoto aufnehmen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>&Album öffnen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>Spitzname und Besitzer &festlegen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>Spiel-Daten &löschen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>Amiibo &wiederherstellen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>Amiibo &formatieren</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>&Mii-Editor öffnen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&TAS &konfigurieren...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>&Spiel-Einstellungen ändern...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Zurücksetzen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>Aufnahme</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>Öffne &Controller-Menü</translation> </message> diff --git a/dist/languages/el.ts b/dist/languages/el.ts index 542e7fa37..3b7aa783a 100644 --- a/dist/languages/el.ts +++ b/dist/languages/el.ts @@ -679,759 +679,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> + <source>Custom RTC Date:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Σημείωση: αυτό μποÏεί να παÏακαμφθεί όταν η ÏÏθμιση πεÏιοχής είναι ως αυτόματη επιλογή</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>ΠεÏιφÎÏεια:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Ζώνη ÎÏας:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Επιλογή χÏήστη κατά την εκκίνηση παιχνιδιοÏ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>ΠαÏση εξομοίωσης όταν βÏίσκεται στο παÏασκήνιο</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>ΑπόκÏυψη δÏομÎα Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï ÏƒÏ„Î·Î½ αδÏάνεια</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Shaders Γλώσσας Μηχανής, μόνο NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Αυτόματη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>ΑκÏιβής</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Επισφαλής</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>ΠαÏαθυÏοποιημÎνο ΧωÏίς ÎŒÏια</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Αποκλειστική ΠλήÏης Οθόνη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>ΧωÏίς Έξοδο Βίντεο</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Αποκωδικοποίηση Βίντεο CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Αποκωδικοποίηση Βίντεο GPU (Î Ïοεπιλογή)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [ΠΕΙΡΑΜΑΤΙΚΟ]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>ΠλησιÎστεÏος Γείτονας</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>ΔιγÏαμμικό</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Δικυβικό</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussian</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>ΚανÎνα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Î Ïοεπιλογή (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Επιβολή 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Επιβολή 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Επιβολή 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>ΕπÎκταση στο ΠαÏάθυÏο</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Αυτόματα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Î ÏοεπιλεγμÎνο</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Ιαπωνικά (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Γαλλικά (Français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>ΓεÏμανικά (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Ιταλικά (Italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Ισπανικά (Español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>ΚινÎζικα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>ΚοÏεάτικα (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Ολλανδικά (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>ΠοÏτογαλικά (Português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Ρώσικα (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>ΤαϊβανÎζικα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Î’Ïετανικά Αγγλικά</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Καναδικά Γαλλικά</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>ΛατινοαμεÏικάνικα Ισπανικά</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>ΑπλοποιημÎνα ΚινÎζικα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>ΠαÏαδοσιακά ΚινÎζικα (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>ΠοÏτογαλικά Î’Ïαζιλίας (Português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Ιαπωνία</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>ΗΠΑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>ΕυÏώπη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>ΑυστÏαλία</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Κίνα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>ΚοÏÎα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Ταϊβάν</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>ΚοÏβα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Αίγυπτος</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>ΓκÏήνουιτς</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Χονγκ Κονγκ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Ισλανδία</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>ΙÏάν</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>ΙσÏαήλ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Ιαμαϊκή</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>ΛιβÏη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Îαβάχο</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Πολωνία</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>ΠοÏτογαλία</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>ΣιγκαποÏÏη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>ΤουÏκία</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Παγκόσμια</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Μονοφωνικό</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>ΣτÎÏεοφωνικό</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Docked</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Handheld</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2300,33 +2300,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>ΧÏώμα Φόντου:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation type="unfinished"/> </message> @@ -3392,6 +3392,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3726,42 +3735,47 @@ Current values are %1% and %2% respectively.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Î Ïόσθετα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>ΣÏστημα</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>ΓÏαφικά</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Î Ïοχ. ΓÏαφικά</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Ήχος</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Ιδιότητες</translation> </message> @@ -3865,67 +3879,67 @@ Current values are %1% and %2% respectively.</source> <translation>Εισαγάγετε Îνα όνομα χÏήστη για τον νÎο χÏήστη:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Εισαγάγετε Îνα νÎο όνομα χÏήστη:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>ΕπιλÎξτε Εικόνα χÏήστη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Εικόνες JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Σφάλμα κατα τη διαγÏαφή εικόνας</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>ΠαÏουσιάστηκε σφάλμα κατά την Ï€Ïοσπάθεια αντικατάστασης της Ï€ÏοηγοÏμενης εικόνας στο: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Σφάλμα κατα τη διαγÏαφή του αÏχείου</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Δεν είναι δυνατή η διαγÏαφή του υπάÏχοντος αÏχείου: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Σφάλμα δημιουÏγίας καταλόγου εικόνων χÏήστη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Δεν είναι δυνατή η δημιουÏγία του καταλόγου %1 για την αποθήκευση εικόνων χÏήστη.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Σφάλμα κατά την αντιγÏαφή της εικόνας χÏήστη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>ΑδÏνατη η αντιγÏαφή της εικόνας από το %1 στο %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Σφάλμα αλλαγής μεγÎθους εικόνας χÏήστη</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Δεν είναι δυνατή η αλλαγή μεγÎθους της εικόνας</translation> </message> @@ -3933,17 +3947,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Επιβεβαίωση ΔιαγÏαφής</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation type="unfinished"/> @@ -4096,7 +4110,7 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4807,110 +4821,110 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>ΤηλεμετÏία</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&ΣυνÎχεια</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&ΠαÏση</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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>Μη μεταφÏασμÎνη συμβολοσειÏά @@ -4918,980 +4932,922 @@ 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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Σφάλμα κατά τη φόÏτωση της ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Εμφανίστηκε Îνα απÏοσδιόÏιστο σφάλμα. ΑνατÏÎξτε στο αÏχείο καταγÏαφής για πεÏισσότεÏες λεπτομÎÏειες.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Αποθήκευση δεδομÎνων</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Ο φάκελος δεν υπάÏχει!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>ΑφαίÏεση ΑÏχείου</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Επιλογή λειτουÏγίας απόÏÏιψης RomFS </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>ΑκÏÏωση</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Η επÎμβαση ολοκληÏώθηκε με επιτυχία.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Επιλογή καταλόγου</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Ιδιότητες</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>ΦόÏτωση αÏχείου</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>ΑποτελÎσματα εγκατάστασης</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>ΕφαÏμογή συστήματος</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Παιχνίδι</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>ΕνημÎÏωση παιχνιδιοÏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC παιχνιδιοÏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>ΕπιλÎξτε τον Ï„Ïπο εγκατάστασης NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Το αÏχείο δεν βÏÎθηκε</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Το αÏχείο "%1" δεν βÏÎθηκε</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Σφάλμα κατα το άνοιγμα του URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Αδυναμία ανοίγματος του URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Σφάλμα</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>ΦόÏτωση Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Σφάλμα φόÏτωσης δεδομÎνων Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Το επιλεγμÎνο αÏχείο δεν αποτελεί ÎγκυÏο amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Το επιλεγμÎνο αÏχείο χÏησιμοποιείται ήδη</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet ΧειÏισμοÏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Λήψη στιγμιότυπου οθόνης</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Εικόνα PBG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&ΈναÏξη</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Κλίμακα: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>ΤαχÏτητα: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>ΤαχÏτητα: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>ΚαÏÎ: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- Λείπει το BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- Λείπει το BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- Λείπει το PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>Είστε σίγουÏοι ότι θÎλετε να κλείσετε το yuzu;</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6167,62 +6123,62 @@ Would you like to bypass this and exit anyway?</source> <translation>Ιδιότητες</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>ΣκανάÏισμα ΥποφακÎλων</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>ΑφαίÏεση ΦακÎλου Παιχνιδιών</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Μετακίνηση Επάνω</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Μετακίνηση Κάτω</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Ανοίξτε την Τοποθεσία Καταλόγου</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>ΚαθαÏισμός</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Όνομα</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Συμβατότητα</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Î Ïόσθετα</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>ΤÏπος αÏχείου</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>ΜÎγεθος</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6293,7 +6249,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Διπλο-κλικ για Ï€Ïοσθήκη νεου φακÎλου στη λίστα παιχνιδιών</translation> </message> @@ -6306,12 +6262,12 @@ Would you like to bypass this and exit anyway?</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>ΦίλτÏο:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Εισαγάγετε μοτίβο για φιλτÏάÏισμα</translation> </message> @@ -6821,176 +6777,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&ΠεÏιήγηση σε δημόσιο λόμπι παιχνιδιοÏ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&ΔημιουÏγία δωματίου</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&ΑποχωÏήσει από το δωμάτιο</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Άμεση σÏνδεση σε Δωμάτιο</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Εμφάνιση Ï„ÏÎχοντος δωματίου</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&ΈναÏξη</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/es.ts b/dist/languages/es.ts index 2d9f44671..8d47b6597 100644 --- a/dist/languages/es.ts +++ b/dist/languages/es.ts @@ -581,12 +581,12 @@ Inmediato (sin sincronización) sólo muestra lo que está disponible y puede mo <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="109"/> <source>Force maximum clocks (Vulkan only)</source> - <translation>Forzar relojes máximos (sólo Vulkan)</translation> + <translation>Forzar relojes al máximo (sólo Vulkan)</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="110"/> <source>Runs work in the background while waiting for graphics commands to keep the GPU from lowering its clock speed.</source> - <translation>Ejecuta los procesos en segundo plano mientras espera las instrucciones gráficas para evitar que la GPU reduzca su velocidad de reloj.</translation> + <translation>Ejecuta los procesos en segundo plano mientras se espera a las instrucciones gráficas para evitar que la GPU reduzca su velocidad de reloj.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="112"/> @@ -611,12 +611,12 @@ Inmediato (sin sincronización) sólo muestra lo que está disponible y puede mo <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="118"/> <source>Use Fast GPU Time (Hack)</source> - <translation>Usar tiempo rápido en la GPU (Hack)</translation> + <translation>Usar tiempo rápido de GPU (Hack)</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="119"/> <source>Enables Fast GPU Time. This option will force most games to run at their highest native resolution.</source> - <translation>Activa el tiempo rápido de GPU. Esta opción hará que muchos juegos estén forzados a ejecutarse en su resolución nativa máxima.</translation> + <translation>Activa el tiempo rápido de GPU. Esta opción hará que la mayorÃa de juegos estén forzados a ejecutarse en su resolución nativa máxima.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="121"/> @@ -631,7 +631,7 @@ Inmediato (sin sincronización) sólo muestra lo que está disponible y puede mo <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="126"/> <source>Enable Compute Pipelines (Intel Vulkan Only)</source> - <translation>Activar Compute Pipelines (solo Intel Vulkan)</translation> + <translation>Activar canalizaciones de cómputo (solo Intel Vulkan)</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="127"/> @@ -639,8 +639,8 @@ Inmediato (sin sincronización) sólo muestra lo que está disponible y puede mo This setting only exists for Intel proprietary drivers, and may crash if enabled. Compute pipelines are always enabled on all other drivers.</source> <translation>Activa las canalizaciones de cómputo, que son necesarias en algunos juegos. -Esta opción sólo está para los drivers propietarios de AMD, y puede colgarse si se activa. -Las canalizaciones de cómputo siempre están activadas en los otros drivers.</translation> +Esta opción sólo afecta a los controladores propios de AMD, y puede producir errores si se activa. +Las canalizaciones de cómputo siempre están activadas en los demás controladores.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="131"/> @@ -650,7 +650,7 @@ Las canalizaciones de cómputo siempre están activadas en los otros drivers.</t <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="132"/> <source>Uses reactive flushing instead of predictive flushing, allowing more accurate memory syncing.</source> - <translation>Usa limpieza de memoria reactiva en vez de predictiva, permitiendo una sincronización de memoria más precisa.</translation> + <translation>Usa limpieza de memoria reactiva en vez de predictiva, permitiendo una sincronización de memoria más precisa.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="134"/> @@ -684,759 +684,759 @@ Las canalizaciones de cómputo siempre están activadas en los otros drivers.</t </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC personalizado</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Idioma:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Nota: esto puede ser reemplazado si la opción de región está en "autoseleccionar"</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Región:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Zona horaria:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Método de salida de sonido:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>Modo consola:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Seleccionar usuario al arrancar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Pausar emulación cuando la ventana esté en segundo plano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Confirmar detención</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Ocultar el cursor por inactividad.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Desactivar applet de mandos</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>Activar Modo Juego</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU AsÃncrona</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Sin compresión (Calidad óptima)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Calidad baja)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Calidad media)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Ninguno</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Shaders de ensamblado, sólo NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Experimental, sólo Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (Experimental, sólo AMD/Mesa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Alto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Extremo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Preciso</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Impreciso</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoico (Deshabilita la mayorÃa de optimizaciones)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>DynARMic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Ventana sin bordes</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Pantalla completa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Sin salida de vÃdeo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Decodificación de vÃdeo en la CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Decodificación de vÃdeo en GPU (Por defecto)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>x0,5 (360p/540p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>x0,75 (540p/810p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>x1 (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>x1,5 (1080p/1620p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>x2 (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>x3 (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>x4 (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>x5 (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>x6 (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>x7 (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>x8 (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Vecino más próximo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilineal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicúbico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussiano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Ninguno</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Predeterminado (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Forzar 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Forzar 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Forzar 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Estirar a la ventana</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automático</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Predeterminado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>x2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>x4</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>x8</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>x16</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japonés (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Inglés estadounidense</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Francés (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Alemán (deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italiano (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Español</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Chino</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Coreano (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Holandés (nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugués (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Ruso (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanés</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Inglés británico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Francés canadiense</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Español latinoamericano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Chino simplificado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Chino tradicional (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Portugués brasileño (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japón</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>EEUU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>China</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Corea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwán</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Auto (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Predeterminada (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egipto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islandia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Irán</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polonia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>TurquÃa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulú</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Estéreo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Envolvente</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (Por defecto)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (Inseguro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (Inseguro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Sobremesa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Portátil</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Preguntar siempre (Por defecto)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Solo si el juego pide no ser cerrado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>Nunca preguntar</translation> </message> @@ -2316,33 +2316,33 @@ Las canalizaciones de cómputo siempre están activadas en los otros drivers.</t <translation>Color de fondo:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Desactivado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync Desactivado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Recomendado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Activado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync Activado</translation> </message> @@ -3408,6 +3408,15 @@ Para invertir los ejes, mueve primero el joystick de manera vertical, y luego ho </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3743,42 +3752,47 @@ Los valores actuales son %1% y %2% respectivamente.</translation> <translation>Algunos ajustes sólo están disponibles cuando no se estén ejecutando los juegos.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Extras / Add-Ons</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Sistema</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Gráficos</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Gráficos avanz.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Perfiles de entrada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Propiedades</translation> </message> @@ -3882,67 +3896,67 @@ Los valores actuales son %1% y %2% respectivamente.</translation> <translation>Introduce un nombre para el nuevo usuario:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Introduce un nuevo nombre de usuario:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Selecciona una imagen de usuario</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Imagenes JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Error al eliminar la imagen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Ha ocurrido un error al intentar sobrescribir la imagen anterior en: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Error al eliminar el archivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>No se puede eliminar el archivo existente: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Error al crear el directorio de imagen del usuario</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>No se puede crear el directorio %1 para almacenar imágenes de usuario.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Error al copiar la imagen de usuario.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>No se puede copiar la imagen de %1 a %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Error al redimensionar la imagen de usuario</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>No se puede cambiar el tamaño de la imagen</translation> </message> @@ -3950,17 +3964,17 @@ Los valores actuales son %1% y %2% respectivamente.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>¿Eliminar este usuario? Todos los datos de guardado del usuario serán eliminados.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation> Confirmar eliminación</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Nombre: %1 @@ -4114,7 +4128,7 @@ UUID: %2</translation> <translation>Núcleo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4826,601 +4840,601 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>TelemetrÃa </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <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="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Ejecutando un juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Cargando Web applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Desactivar Web applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <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="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Desileciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Silenciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Restablecer Volumen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Eliminar archivos recientes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pausar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Advertencia: formato del juego obsoleto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>¡Error al cargar la ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Cerrando software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Datos de guardado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Datos de mods</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Error al abrir la carpeta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>¡La carpeta no existe!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Error al eliminar el contenido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Error al eliminar la actualización</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Error al eliminar el DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>¿Eliminar contenido del juego instalado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>¿Eliminar actualización del juego instalado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>¿Eliminar el DLC del juego instalado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Eliminar entrada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Se ha eliminado con éxito</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <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="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <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="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <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="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <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="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <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="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>¿Quitar almacenamiento de caché?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Eliminar archivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>Eliminar información del tiempo de juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>¿Reestablecer tiempo de juego?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <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="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <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="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <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="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>¡La extracción de RomFS ha fallado!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Completo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>En secciones</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Elegir método de volcado de RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Extrayendo RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>¡La extracción RomFS ha tenido éxito!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>La operación se completó con éxito.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>¡No se pudo ejecutar la verificación de integridad!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>No se ha podido comprobar la validez de los contenidos del archivo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>¡Verificación de integridad fallida!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>Los contenidos del archivo pueden estar corruptos.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Verificando integridad...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>¡La verificación de integridad ha sido un éxito!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>¡Verificación de integridad fallida!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Los contenidos del archivo pueden estar corruptos.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Crear acceso directo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>¿Desea iniciar el juego en pantalla completa?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <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="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>No se ha podido crear el acceso directo de %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Crear icono</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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 ha podido crear.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Error al intentar abrir %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Seleccionar directorio</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Propiedades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Cargar archivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <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="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Directorio seleccionado no válido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Instalar archivos</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Instalando el archivo "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Instalar resultados</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n archivo(s) recién instalado/s @@ -5429,7 +5443,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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n archivo(s) recién sobreescrito/s @@ -5438,7 +5452,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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n archivo(s) no se instaló/instalaron @@ -5447,194 +5461,194 @@ 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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Aplicación del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Archivo del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Actualización de la aplicación del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Paquete de firmware (Tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Paquete de firmware (Tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Actualización de juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC del juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Titulo delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Seleccione el tipo de instalación NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Fallo en la instalación</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Archivo no encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Archivo "%1" no encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>Aceptar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>No se cumplen los requisitos de hardware</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>El sistema no cumple con los requisitos de hardware recomendados. Los informes de compatibilidad se han desactivado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Falta la cuenta de Yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Error al abrir la URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Grabación TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>¿Sobrescribir archivo del jugador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Configuración no válida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <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="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Archivo amiibo (%1);; Todos los archivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Cargar amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Error al cargar los datos Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Ha ocurrido un error inesperado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5643,291 +5657,225 @@ Por favor, utiliza esta función sólo para instalar actualizaciones y DLCs.</tr %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>No hay firmware disponible</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>Por favor, instala el firmware para usar la aplicación del Ãlbum.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>Applet de Ãlbum</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>La aplicación del Ãlbum no esta disponible. Por favor, reinstala el firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>Por favor, instala el firmware para usar la applet de Cabinet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Applet de Cabinet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>La applet de Cabinet no está disponible. Por favor, reinstale el firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Por favor, instala el firmware para usar el editor de Mii.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Applet de Editor de Mii</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>El editor de Mii no está disponible. Por favor, reinstala el firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>Por favor, instala el firmware para poder usar el Menú de mandos.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet de Mandos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>El Menú de mandos no se encuentra disponible. Por favor, reinstala el firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Captura de pantalla</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Imagen PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Estado TAS: ejecutando %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Estado TAS: grabando %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Estado TAS: inactivo %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Estado TAS: nulo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Parar de ejecutar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Pausar g&rabación</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>G&rabar</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Velocidad: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Velocidad: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Juego: %1 FPS (desbloqueado)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Juego: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Fotogramas: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUMEN: SILENCIO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUMEN: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Confirmar la clave de rederivación</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Estás a punto de forzar la rederivación de todas tus claves. -Si no sabes qué es esto, -es una acción potencialmente destructiva. -Por favor, asegúrate de que esto -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="4762"/> - <source>Missing fuses</source> - <translation>Faltan fuses</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- Falta BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Falta BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Falta PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Faltan componentes de derivación</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Derivando claves... -Esto puede llevar unos minutos dependiendo -del rendimiento de su sistema.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Obtención de claves</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Desencriptación del Sistema de Archivos Fallida</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Las claves de encriptación no han podido desencriptar el firmware. <br>Por favor, siga<a href='https://yuzu-emu.org/help/quickstart/'>la guÃa de inicio rápido de yuzu</a> para obtener todas tus claves, firmware y juegos.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Selecciona el destinatario para volcar el RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6205,62 +6153,62 @@ Would you like to bypass this and exit anyway?</source> <translation>Propiedades</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Escanear subdirectorios</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Eliminar directorio de juegos</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Mover hacia arriba</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Mover hacia abajo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Abrir ubicación del directorio</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Limpiar</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nombre</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Compatibilidad</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Extras/Add-ons</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Tipo de archivo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Tamaño</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>Tiempo de juego</translation> </message> @@ -6331,7 +6279,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Haz doble clic para agregar un nuevo directorio a la lista de juegos.</translation> </message> @@ -6344,12 +6292,12 @@ Would you like to bypass this and exit anyway?</source> <translation><numerusform>%1 de %n resultado(s)</numerusform><numerusform>%1 de %n resultado(s)</numerusform><numerusform>%1 de %n resultado(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Búsqueda:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Introduce un patrón para buscar</translation> </message> @@ -6861,176 +6809,171 @@ Mensaje de depuración: </translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Reiniciar claves...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>&Verificar contenidos instalados</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Acerca de yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Modo &ventana</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Con&figurar...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Mostrar complementos de cabecera del D&ock </translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Mostrar barra de &búsqueda</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Mostrar barra de &estado</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Mostrar barra de estado</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Buscar en el lobby de juegos públicos</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Crear sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Abandonar sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Conexión directa a una sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Mostrar sala actual</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>P&antalla completa</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Reiniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Cargar/Eliminar &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Reporte de compatibilidad</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Abrir página de &mods</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Abrir guÃa de &inicio rápido</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&Preguntas frecuentes</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Abrir la carpeta de &yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Captura de pantalla</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>Abrir &Album</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&Darle Nombre y Propietario</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>&Borrar Datos de Juego</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&Restaurar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>&Formatear Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>Abrir Editor de &Mii</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Configurar TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Configurar j&uego actual...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Reiniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>G&rabar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>Abrir Menú de &Mandos</translation> </message> diff --git a/dist/languages/fr.ts b/dist/languages/fr.ts index 93f5e408c..80781d42f 100644 --- a/dist/languages/fr.ts +++ b/dist/languages/fr.ts @@ -686,759 +686,759 @@ même-ci la fréquence d'image est dévérouillée. </translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC personnalisé</translation> + <source>Custom RTC Date:</source> + <translation>Date RTC personnalisée :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Langue :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Note : ceci peut être remplacé quand le paramètre de région est réglé sur automatique</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Région :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Fuseau horaire :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Mode de sortie sonore :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>Mode console :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Demander un utilisateur au lancement d'un jeu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Mettre en pause l’émulation lorsque mis en arrière-plan </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Confirmer avant d'arrêter l'émulation</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Cacher la souris en cas d'inactivité</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Désactiver l'applet du contrôleur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>Activer le mode jeu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU Asynchrone</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Non compressé (Meilleure qualité)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Basse qualité)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Qualité moyenne)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Nul</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Shaders en Assembleur, NVIDIA Seulement)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Expérimental, Mesa seulement)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (Expérimental, AMD/Mesa uniquement)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Haut</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Extême</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Précis</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Risqué</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoïaque (désactive la plupart des optimisations)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>Dynamique</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Fenêtré sans bordure</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Plein écran exclusif</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Pas de sortie vidéo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Décodage Vidéo sur le CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Décodage Vidéo sur le GPU (par défaut)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EXPÉRIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [EXPÉRIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Plus proche voisin</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinéaire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubique</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussien</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Aucune</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Par défaut (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Forcer le 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Forcer le 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Forcer le 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Étirer à la fenêtre</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automatique</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Par défaut</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japonais (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Anglais Américain</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Français (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Allemand (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italien (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Espagnol (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Chinois</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Coréen (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Néerlandais (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugais (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russe (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taïwanais</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Anglais Britannique</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Français Canadien</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Espagnol d'Amérique Latine</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Chinois Simplifié</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Chinois Traditionnel (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Portugais Brésilien (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japon</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>É.-U.A.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europe</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australie</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Chine</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Corée</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taïwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Auto (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Par défaut (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Égypte</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hong Kong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islande</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israël</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaïque</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libye</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Pologne</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapour</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turquie</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stéréo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4 GB DRAM (Par défaut)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6 GB DRAM (Risqué)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8 GB DRAM (Risqué)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Mode TV</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Mode Portable</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Toujours demander (par défaut)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Uniquement si le jeu précise de ne pas s'arrêter</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>Jamais demander</translation> </message> @@ -2318,33 +2318,33 @@ même-ci la fréquence d'image est dévérouillée. </translation> <translation>Couleur de l’arrière plan :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Désactivé</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync Désactivée</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Recommandé</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Activé</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync Activée</translation> </message> @@ -3410,6 +3410,15 @@ Pour inverser les axes, bougez d'abord votre joystick verticalement, puis h </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3745,42 +3754,47 @@ Les valeurs actuelles sont respectivement de %1% et %2%.</translation> <translation>Certains paramètres ne sont disponibles que lorsqu'un jeu n'est pas en cours d'exécution.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Extensions</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Système</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Graphiques</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Adv. Graphiques</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Profils d'entrée</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Propriétés</translation> </message> @@ -3884,67 +3898,67 @@ Les valeurs actuelles sont respectivement de %1% et %2%.</translation> <translation>Entrez un nom d'utilisateur pour le nouvel utilisateur :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Entrez un nouveau nom d'utilisateur :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Sélectionner l'image de l'utilisateur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Images JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Erreur dans la suppression de l'image</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Une erreur est survenue en essayant de changer l'image précédente à : %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Erreur dans la suppression du fichier</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Impossible de supprimer le fichier existant : %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Erreur dans la création du répertoire d'image de l'utilisateur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Impossible de créer le répertoire %1 pour stocker les images de l'utilisateur.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Erreur dans la copie de l'image de l'utilisateur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Impossible de copier l'image de %1 à %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Erreur de redimensionnement de l'image utilisateur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Impossible de redimensionner l'image</translation> </message> @@ -3952,17 +3966,17 @@ Les valeurs actuelles sont respectivement de %1% et %2%.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Supprimer cet utilisateur ? Toutes les données de l'utilisateur vont être supprimées.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Confirmer la suppression</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Nom : %1 @@ -4116,7 +4130,7 @@ UUID : %2</translation> <translation>CÅ“ur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4828,806 +4842,806 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Télémétrie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Détection d'une installation Vulkan endommagée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Exécution d'un jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Chargement de l'applet web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Désactiver l'applet web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <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="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Remettre le son</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Couper le son</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Réinitialiser le volume</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Effacer les fichiers récents</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Continuer</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pause</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <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="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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 le format de répertoire ROM déconstruit pour ce jeu, qui est un format obsolète remplacé par d'autres tels que NCA, NAX, XCI ou NSP. Les répertoires de ROM déconstruits ne contiennent pas d'icônes, de métadonnées ni de prise en charge des mises à jour.<br><br>Pour obtenir des explications sur les différents formats pris en charge par yuzu, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>consultez notre wiki</a>. Ce message ne s'affichera plus.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Erreur lors du chargement de la ROM !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Fermeture du logiciel...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Enregistrer les données</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Donnés du Mod</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Erreur dans l'ouverture du dossier %1.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Le dossier n'existe pas !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Erreur en enlevant le contenu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Erreur en enlevant la Mise à Jour</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Erreur en enlevant le DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Enlever les données du jeu installé ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Enlever la mise à jour du jeu installé ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Enlever le DLC du jeu installé ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Supprimer l'entrée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Supprimé avec succès</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <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="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <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="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <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="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <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="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Supprimer la configuration personnalisée du jeu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Supprimer le stockage du cache ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Supprimer fichier</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>Supprimer les données de temps de jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>Réinitialiser le temps de jeu ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <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="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <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="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <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="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>L'extraction de la RomFS a échoué !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Plein</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Squelette</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <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="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Extraction de la RomFS ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Extraction de la RomFS réussi !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <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="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>La vérification de l'intégrité n'a pas pu être effectuée !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>La validité du contenu du fichier n'a pas été vérifiée.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>La vérification de l'intégrité a échoué !</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>Le contenu du fichier pourrait être corrompu.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Vérification de l'intégrité...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>La vérification de l'intégrité a réussi !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>La vérification de l'intégrité a échoué !</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Le contenu du fichier pourrait être corrompu.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Créer un raccourci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>Voulez-vous lancer le jeu en plein écran ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <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="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>Impossible de créer un raccourci vers %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Créer une icône</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Erreur lors de l'ouverture %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Sélectionner un répertoire</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Propriétés</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Charger un fichier</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Ouvrir le dossier des ROM extraites</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Destination sélectionnée invalide</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Installer les fichiers</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Installation du fichier "%1" ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Résultats d'installation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Application Système</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Archive Système</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Mise à jour de l'application système</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Paquet micrologiciel (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Paquet micrologiciel (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Mise à jour de jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC de jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Titre Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <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="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Échec de l'installation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Fichier non trouvé</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Fichier "%1" non trouvé</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Éxigences matérielles non respectées</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Compte yuzu manquant</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Erreur lors de l'ouverture de l'URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Enregistrement TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Écraser le fichier du joueur 1 ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Configuration invalide détectée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Le contrôleur portable ne peut pas être utilisé en mode TV. La manette pro sera sélectionné.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <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="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Erreur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Fichier Amiibo (%1);; Tous les fichiers (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Charger un Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <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="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Une erreur inconnue s'est produite</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5636,291 +5650,225 @@ Veuillez n'utiliser cette fonctionnalité que pour installer des mises à j %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>Pas de firmware disponible</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>Veuillez installer le firmware pour utiliser l'applet de l'album.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>Applet de l'album</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>L'applet de l'album n'est pas disponible. Veuillez réinstaller le firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>Veuillez installer le firmware pour utiliser l'applet du cabinet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Applet du cabinet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>L'applet du cabinet n'est pas disponible. Veuillez réinstaller le firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Veuillez installer le firmware pour utiliser l'éditeur Mii.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Applet de l'éditeur Mii</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>L'éditeur Mii n'est pas disponible. Veuillez réinstaller le firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>Veuillez installer le firmware pour utiliser le menu des manettes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet Contrôleur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>Le menu des manettes n'est pas disponible. Veuillez réinstaller le firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Capture d'écran</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Image PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <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="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>État du TAS : Enregistrement %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>État du TAS : Inactif %1:%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>État du TAS : Invalide</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Stopper l'exécution</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Stopper l'en&registrement</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>En&registrer</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Vitesse : %1% / %2% </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Vitesse : %1% </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Jeu : %1 IPS (Débloqué)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Jeu : %1 FPS </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Frame : %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>AUCUN AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUME : MUET</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME : %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Confirmer la réinstallation de la clé</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Vous êtes sur le point de réinstaller toutes vos clés. -Si vous ne savez pas ce que cela veut dire et ce que vous faites, -cela peut être une action potentiellement destructrice. -S'il vous plaît assurez-vous que c'est bien ce que vous voulez -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="4762"/> - <source>Missing fuses</source> - <translation>Fusibles manquants</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- BOOT0 manquant</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- BCPKG2-1-Normal-Main manquant</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- PRODINFO manquant</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Composants de dérivation manquants</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Installation des clés... -Cela peut prendre jusqu'à une minute en fonction -des performances de votre système.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</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 toutes vos clés, firmware et jeux.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Installation des clés</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Échec du déchiffrement de l'archive système.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Les clés de chiffrement n'ont pas réussi à déchiffrer le firmware. <br>Veuillez suivre <a href='https://yuzu-emu.org/help/quickstart/'>le guide de démarrage rapide du yuzu</a> pour obtenir toutes vos clés, firmware et jeux.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <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="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6198,62 +6146,62 @@ Voulez-vous ignorer ceci and quitter quand même ?</translation> <translation>Propriétés</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Scanner les sous-dossiers</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Supprimer le répertoire du jeu</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Monter</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Descendre</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Ouvrir l'emplacement du répertoire</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Effacer</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nom</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Compatibilité</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Extensions</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Type de fichier</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Taille</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>Temps de jeu</translation> </message> @@ -6324,7 +6272,7 @@ Voulez-vous ignorer ceci and quitter quand même ?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Double-cliquez pour ajouter un nouveau dossier à la liste de jeux</translation> </message> @@ -6337,12 +6285,12 @@ Voulez-vous ignorer ceci and quitter quand même ?</translation> <translation><numerusform>%1 sur %n résultat</numerusform><numerusform>%1 sur %n résultats</numerusform><numerusform>%1 sur %n résultats</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filtre :</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Entrez un motif à filtrer</translation> </message> @@ -6854,176 +6802,171 @@ Message de débogage : </translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Réinitialiser les clés...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>&Vérifier les contenus installés</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&À propos de yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>&Mode fenêtre unique</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>&Configurer...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>&Afficher les en-têtes du widget Dock</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>&Afficher la barre de filtre</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>&Afficher la barre d'état</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Afficher la barre d'état</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Parcourir le menu des jeux publics</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Créer un salon</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Quitter le salon</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Connexion directe au salon</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Afficher le salon actuel</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>P&lein écran</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Redémarrer</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Charger/Retirer &Amiibo…</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Signaler la compatibilité</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Ouvrir la &page des mods</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Ouvrir le &guide de démarrage rapide</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Ouvrir le &dossier de Yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Capture d'écran</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>Ouvrir l'&album</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&Définir le surnom et le propriétaire</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>&Supprimer les données du jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&Restaurer l'amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>&Formater l'amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>Ouvrir l'&éditeur Mii</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Configurer TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Configurer le j&eu actuel...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Démarrer</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Réinitialiser</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>En&registrer</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>Ouvrir le &menu des manettes</translation> </message> diff --git a/dist/languages/hu.ts b/dist/languages/hu.ts index 9254f1f3f..7a7318f6a 100644 --- a/dist/languages/hu.ts +++ b/dist/languages/hu.ts @@ -588,7 +588,7 @@ Immediate (no synchronization) just presents whatever is available and can exhib <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="112"/> <source>Anisotropic Filtering:</source> - <translation>Anizotróp szűrés:</translation> + <translation>Anizotropikus szűrés:</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="113"/> @@ -679,759 +679,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Egyéni RTC</translation> + <source>Custom RTC Date:</source> + <translation>Egyéni RTC dátum:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Nyelv:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Megjegyzés: ez felülÃrható, ha a régióbeállÃtás automatikus kiválasztású.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Régió:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>IdÅ‘zóna:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Hangkimeneti mód:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>Konzol mód:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Felhasználói kérelem a játék indÃtásakor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Emuláció szüneteltetése a háttérben</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Emuláció leállÃtásának megerÅ‘sÃtése</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Egér elrejtése inaktivitáskor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>VezérlÅ‘ applet letiltása</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>Játékmód engedélyezése</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU aszinkron</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>TömörÃtetlen (legjobb minÅ‘ség)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (alacsony minÅ‘ség)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (közepes minÅ‘ség)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly Shaders, csak NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (kÃsérleti, csak Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (kÃsérleti, csak AMD/Mesa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normál</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Magas</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Extrém</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Automatikus</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Pontos</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Nem biztonságos</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (a legtöbb optimalizálást letiltja)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>Dinamikus</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Szegély nélküli ablak</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>ExkluzÃv teljes képernyÅ‘</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Nincs videokimenet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU videódekódolás</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU videódekódolás (alapértelmezett)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [KÃSÉRLETI]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [KÃSÉRLETI]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [KÃSÉRLETI]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Legközelebbi szomszéd</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilineáris</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bikubikus</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gauss-féle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Nincs</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Alapértelmezett (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>4:3 kényszerÃtése</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>21:9 kényszerÃtése</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>16:10 kényszerÃtése</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Ablakhoz nyújtás</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automatikus</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Alapértelmezett</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japán (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Amerikai angol</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Francia (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Német (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Olasz (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spanyol (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>KÃnai</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Koreai (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Holland (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugál (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Orosz (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Tajvani</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Brit Angol</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Kanadai francia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Latin-amerikai spanyol</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>EgyszerűsÃtett kÃnai</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Hagyományos kÃnai (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>BrazÃliai portugál (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japán</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Európa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Ausztrália</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>KÃna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Tajvan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Automatikus (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Alapértelmezett (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Kuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egyiptom</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Izland</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Irán</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Izrael</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>LÃbia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navahó</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Lengyelország</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugália</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Szingapúr</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Törökország</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Univerzális</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Sztereó</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Térhangzás</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (Alapértelmezett)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (Nem biztonságos)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (Nem biztonságos)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Dokkolt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Kézi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Mindig kérdezzen rá (alapértelmezett)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Csak akkor, ha a játék kifejezetten kéri a folytatást.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>Soha ne kérdezzen rá</translation> </message> @@ -2284,33 +2284,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>HáttérszÃn:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Ki</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync Ki</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Ajánlott</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Be</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync Be</translation> </message> @@ -2984,7 +2984,7 @@ Compute pipelines are always enabled on all other drivers.</source> <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="802"/> <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="3183"/> <source>Modifier Range: 0%</source> - <translation type="unfinished"/> + <translation>MódosÃtó tartomány: 0%</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="848"/> @@ -3376,6 +3376,15 @@ A tengely megfordÃtásához mozgasd a kart elÅ‘ször függÅ‘legesen, majd vÃzs </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3711,42 +3720,47 @@ A jelenlegi érték %1% és %2%.</translation> <translation>Néhány beállÃtás csak akkor érhetÅ‘ el, amikor nem fut játék.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>KiegészÃtÅ‘k</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Rendszer</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Haladó graf.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Hang</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Beviteli profilok</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Tulajdonságok</translation> </message> @@ -3850,67 +3864,67 @@ A jelenlegi érték %1% és %2%.</translation> <translation>Add meg az új felhasználó nevét:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Add meg az új felhasználóneved:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Felhasználói kép kiválasztása</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG képek (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Hiba történt a kép törlése során</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Hiba történt az elÅ‘zÅ‘ kép felülÃrása során: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Hiba történt a fájl törlés során</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>A meglévÅ‘ fájl törlése nem lehetséges: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Hiba történt a felhasználó kép könyvtárának létrehozásakor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Nem sikerült létrehozni a(z) %1 könyvtárat a felhasználó képeinek tárolásához.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Hiba történt a felhasználói kép másolásakor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Nem sikerült kimásolni a képet innen %1 ide %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Hiba történt a felhasználói kép átméretezésekor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>A kép nem méretezhetÅ‘ át</translation> </message> @@ -3918,17 +3932,17 @@ A jelenlegi érték %1% és %2%.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Törlöd a felhasználót? Minden felhasználói adat törölve lesz.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Törlés megerÅ‘sÃtése</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Név: %1 @@ -4082,7 +4096,7 @@ UUID: %2</translation> <translation>Mag</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Figyelmeztetés: A(z) "%1" nyelv nem érvényes a(z) "%2" régióra</translation> </message> @@ -4793,601 +4807,601 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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/'>Névtelen adatok begyűjtve</a> a yuzu fejlesztésének segÃtéséhez. <br/><br/>Szeretnéd megosztani velünk a felhasználási adataidat?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Hibás Vulkan telepÃtés észlelve</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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 Vulkan inicializálása sikertelen volt az indulás során. <br><br>Kattints ide<a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>a probléma megoldásához szükséges instrukciókhoz</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Játék közben</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Web applet betöltése...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Web applet letiltása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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 web applet letiltása nem kÃvánt viselkedéshez vezethet, és csak a Super Mario 3D All-Stars játékhoz ajánlott. Biztosan szeretnéd letiltani a web appletet? (Ezt újra engedélyezheted a Hibakeresés beállÃtásokban.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>A jelenleg készülÅ‘ árnyékolók mennyisége</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>A jelenleg kiválasztott felbontás skálázási aránya.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Jelenlegi emuláció sebessége. 100%-nál magasabb vagy alacsonyabb érték azt jelzi, hogy mennyivel gyorsabb vagy lassabb a Switch-nél.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>A másodpercenként megjelenÃtett képkockák számát mutatja. Ez játékonként és jelenetenként eltérÅ‘ lehet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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>Egy Switch-kép emulálásához szükséges idÅ‘, képkockaszám-korlátozás és v-sync nélkül. Teljes sebességű emulálás esetén ennek legfeljebb 16.67 ms-nak kell lennie.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>NémÃtás feloldása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>NémÃtás</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>HangerÅ‘ visszaállÃtása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Legutóbbi fájlok törlése</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Folytatás</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Szünet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Figyelmeztetés: Elavult játékformátum</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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>A dekonstruált ROM könyvtár formátumot használod ehhez a játékhoz, ami egy elavult formátum, melyet már felváltottak más formátumok, mint pl. NCA, NAX, XCI vagy NSP. A dekonstruált ROM könyvtárak nem tartalmaznak ikonokat, metaadatokat és frissÃtési támogatást.<br><br>A yuzu által támogatott Switch formátumok ismertetéséhez <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>látogasd meg wikinket</a>. Ez az üzenet nem jelenik meg újra.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Hiba történt a ROM betöltése során!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>A ROM formátum nem támogatott.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>Hiba történt a videómag inicializálásakor.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Hiba történt a ROM betöltése során! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Ismeretlen hiba történt. Nyisd meg a logot a részletekért.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Szoftver bezárása...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Mentett adat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Modolt adat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Hiba törént a(z) %1 mappa megnyitása során</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>A mappa nem létezik!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Nem sikerült létrehozni az árnyékoló gyorsÃtótár könyvtárat ehhez a játékhoz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Hiba történt a játéktartalom eltávolÃtása során</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Hiba történt a frissÃtés eltávolÃtása során</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Hiba történt a DLC eltávolÃtása során</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Törlöd a telepÃtett játéktartalmat?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Törlöd a telepÃtett játékfrissÃtést?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Törlöd a telepÃtett DLC-t?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Bejegyzés törlése</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Sikeresen eltávolÃtva</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>A telepÃtett alapjáték sikeresen el lett távolÃtva.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Az alapjáték nincs telepÃtve a NAND-ra, ezért nem törölhetÅ‘.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>A telepÃtett frissÃtés sikeresen el lett távolÃtva.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>Nincs telepÃtve frissÃtés ehhez a játékhoz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>Nincs telepÃtve DLC ehhez a játékhoz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 telepÃtett DLC sikeresen eltávolÃtva.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Törlöd az egyéni játék konfigurációt?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Törlöd a gyorsÃtótárat?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Fájl eltávolÃtása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>JátékidÅ‘ törlése</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>VisszaállÃtod a játékidÅ‘t?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>Ehhez a játékhoz nem létezik árnyékoló gyorsÃtótár.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Hiba történt az egyéni konfiguráció törlése során</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>Nem létezik egyéni konfiguráció ehhez a játékhoz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>Egyéni játék konfiguráció sikeresen eltávolÃtva.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>Nem sikerült eltávolÃtani az egyéni játék konfigurációt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS kicsomagolása sikertelen!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Hiba történt a RomFS fájlok másolása közben, vagy a felhasználó megszakÃtotta a műveletet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Teljes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Csontváz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> - <translation type="unfinished"/> + <translation>RomFS kimentési mód kiválasztása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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>Nincs elég hely a RomFS kibontásához itt: %1. SzabadÃtsd fel helyet, vagy válassz egy másik kimentési könyvtárat az Emuláció > Konfigurálás > Rendszer > Fájlrendszer > Kimentési gyökér menüpontban.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>RomFS kicsomagolása...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Mégse</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS kibontása sikeres volt!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>A művelet sikeresen végrehajtva.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>Az integritás ellenÅ‘rzését nem lehetett elvégezni!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>A fájl tartalmának érvényessége nem lett ellenÅ‘rizve.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Az integritás ellenÅ‘rzése sikertelen!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>A fájl tartalma sérült lehet.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Integritás ellenÅ‘rzése...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Integritás ellenÅ‘rzése sikeres!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Az integritás ellenÅ‘rzése sikertelen!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>A fájl tartalma sérült lehet.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Parancsikon létrehozása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>Szeretnéd teljes képernyÅ‘n elindÃtani a játékot?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>Parancsikon sikeresen létrehozva ide %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Ez létrehoz egy parancsikont az aktuális AppImage-hez. FrissÃtés után nem garantált a helyes működése. Folytatod?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>Nem sikerült létrehozni a parancsikont: %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Ikon létrehozása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Nem hozható létre az ikonfájl. Az útvonal "%1" nem létezik és nem is hozható létre.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Hiba a %1 megnyitásakor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Könyvtár kiválasztása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Tulajdonságok</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>A játék tulajdonságait nem sikerült betölteni.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch állományok(%1);;Minden fájl (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Fájl betöltése</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Kicsomagolt ROM könyvár megnyitása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Érvénytelen könyvtár kiválasztva</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>A kiválasztott könyvtár nem tartalmaz 'main' fájlt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>TelepÃthetÅ‘ Switch fájl (*.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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Fájlok telepÃtése</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>%n fájl van hátra</numerusform><numerusform>%n fájl van hátra</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>"%1" fájl telepÃtése...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>TelepÃtés eredménye</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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>A lehetséges konfliktusok elkerülése érdekében nem javasoljuk a felhasználóknak, hogy a NAND-ra telepÃtsék az alapjátékokat. Kérjük, csak frissÃtések és DLC-k telepÃtéséhez használd ezt a funkciót.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n fájl lett frissen telepÃtve @@ -5395,7 +5409,7 @@ Kérjük, csak frissÃtések és DLC-k telepÃtéséhez használd ezt a funkció </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n fájl lett felülÃrva @@ -5403,201 +5417,201 @@ Kérjük, csak frissÃtések és DLC-k telepÃtéséhez használd ezt a funkció </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n fájl telepÃtése sikertelen</numerusform><numerusform>%n fájl telepÃtése sikertelen </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Rendszeralkalmazás</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>RendszerarchÃvum</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Rendszeralkalmazás frissÃtés</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Firmware csomag (A tÃpus)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Firmware csomag (B tÃpus)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Játék</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>JátékfrissÃtés</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Játék DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>NCA telepÃtési tÃpus kiválasztása...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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>Kérjük, válaszd ki, hogy milyen tÃpusú cÃmként szeretnéd telepÃteni ezt az NCA-t: (A legtöbb esetben az alapértelmezett "Játék" megfelelÅ‘.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Nem sikerült telepÃteni</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Az NCA-hoz kiválasztott cÃmtÃpus érvénytelen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Fájl nem található</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>"%1" fájl nem található</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>A hardverkövetelmények nem teljesülnek</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Az eszközöd nem felel meg az ajánlott hardverkövetelményeknek. A kompatibilitás jelentése letiltásra került.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Hiányzó yuzu fiók</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Hiba történt az URL megnyitása során</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Hiba történt az URL megnyitása során: "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS felvétel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>FelülÃrod az 1. játékos fájlját?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Érvénytelen konfig észlelve</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>A kézi vezérlés nem használható dokkolt módban. Helyette a Pro kontroller lesz kiválasztva.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>A jelenlegi amiibo el lett távolÃtva</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Hiba</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>A jelenlegi játék nem keres amiibo-kat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo fájl (%1);; Minden fájl (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Amiibo betöltése</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Amiibo adatok betöltése sikertelen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>A kiválasztott fájl nem érvényes amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>A kiválasztott fájl már használatban van</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Ismeretlen hiba történt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5606,291 +5620,225 @@ Kérjük, csak frissÃtések és DLC-k telepÃtéséhez használd ezt a funkció %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>Nincs elérhetÅ‘ firmware</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>Kérjük, telepÃtsd a firmware-t az Album applet használatához.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>Album applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>Album applet nem elérhetÅ‘. Kérjük, telepÃtsd újra a firmware-t.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>Kérjük, telepÃtsd a firmware-t a kabinet applet használatához.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Kabinet applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>Kabinet applet nem elérhetÅ‘. Kérjük, telepÃtsd újra a firmware-t.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Kérjük, telepÃtsd a firmware-t a Mii-szerkesztÅ‘ használatához.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Mii szerkesztÅ‘ applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>A Mii szerkesztÅ‘ nem elérhetÅ‘. Kérjük, telepÃtsd újra a firmware-t.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>Kérjük, telepÃtsd a firmware-t a vezérlÅ‘ menü használatához.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>VezérlÅ‘ applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>A vezérlÅ‘ menü nem érhetÅ‘ el. Kérjük, telepÃtsd újra a firmware-t.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>KépernyÅ‘kép készÃtése</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG kép (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS állapot: %1/%2 futtatása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS állapot: %1 felvétele</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS állapot: Tétlen %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS állapot: Érvénytelen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Futás leállÃtása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&IndÃtás</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>F&elvétel leállÃtása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>F&elvétel</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>Létrehozás: %n árnyékoló</numerusform><numerusform>Létrehozás: %n árnyékoló</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Skálázás: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Sebesség: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Sebesség: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Játék: %1 FPS (Feloldva)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Játék: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Képkocka: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>Nincs élsimÃtás</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>HANGERÅ: NÉMÃTVA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>HANGERÅ: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Kulcs újragenerálásának megerÅ‘sÃtése</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Épp az összes kulcs kényszerÃtett újragenerálására készülsz. -Ha nem tudod, mit jelent, vagy mit csinálsz, -ez egy potenciálisan veszélyes művelet. -Kérljük, gyÅ‘zÅ‘dj meg róla, hogy ezt szeretnéd, -és opcionálisan készÃts biztonsági másolatot. - -Ez törli az automatikusan generált kulcsfájlokat, és újraindÃtja a kulcsgeneráló modult.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - Hiányzó BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Hiányzó BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Hiányzó PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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>Hiányzó titkosÃtási kulcsok. <br>Kérjük, kövesd a <a href='https://yuzu-emu.org/help/quickstart/'>yuzu gyorstájékoztatóját</a>, hogy megszerezd az összes kulcsot, firmware-t és játékot.<br><br><small>(%1)</small></translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Kulcsok generálása... -Ez akár egy percet is igénybe vehet, -rendszered teljesÃtményétÅ‘l függÅ‘en.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Kulcsok generálása</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>RendszerarchÃvum visszafejtése sikertelen</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation>Hiányzó titkosÃtókulcsok.<br>Kérjük, kövesd <a href='https://yuzu-emu.org/help/quickstart/'>a yuzu gyorstájékoztatót</a>a kulcsok, firmware és játékok beszerzéséhez.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> - <translation type="unfinished"/> + <translation>RomFS kimentési cél kiválasztása</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>Kérjük, válaszd ki melyik RomFS-t szeretnéd kimenteni.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>Biztosan be akarod zárni a yuzut?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Biztos le akarod állÃtani az emulációt? Minden nem mentett adat el fog veszni.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6168,62 +6116,62 @@ Mégis ki szeretnél lépni?</translation> <translation>Tulajdonságok</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Almappák szkennelése</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Játékkönyvtár eltávolÃtása</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Feljebb mozgatás</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Lejjebb mozgatás</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Könyvtár helyének megnyitása</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Törlés</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Név</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatibilitás</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>KiegészÃtÅ‘k</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>FájltÃpus</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Méret</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>JátékidÅ‘</translation> </message> @@ -6294,7 +6242,7 @@ Mégis ki szeretnél lépni?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Dupla kattintással új mappát adhatsz hozzá a játéklistához.</translation> </message> @@ -6307,12 +6255,12 @@ Mégis ki szeretnél lépni?</translation> <translation><numerusform>%1 a(z) %n találatból</numerusform><numerusform>%1 a(z) %n találatból</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Szűrés:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Adj meg egy mintát a szűréshez</translation> </message> @@ -6824,176 +6772,171 @@ HibakeresÅ‘ üzenet:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Kulcsok újrainicializálása...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>&TelepÃtett tartalom ellenÅ‘rzése</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&A yuzuról</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>&Egyablakos mód</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Kon&figurálás...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>D&ock Widget fejlécek megjelenÃtése</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>&SzűrÅ‘sáv mutatása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>&Ãllapotsáv mutatása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Ãllapotsáv mutatása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Nyilvános játéklobbi böngészése</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Szoba létrehozása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Szoba elhagyása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Közvetlen csatlakozás szobához</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Jelenlegi szoba megjelenÃtése</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>T&eljes képernyÅ‘</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&ÚjraindÃtás</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>&Amiibo betöltése/törlése...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Kompatibilitás jelentése</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>&Modok oldal megnyitása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>&Gyorstájékoztató megnyitása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&GYIK</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>&yuzu mappa megnyitása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&KépernyÅ‘kép készÃtése</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>&Album megnyitása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&Becenév és tulajdonos beállÃtása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>&Játékadatok törlése</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&Amiibo helyreállÃtása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>&Amiibo formázása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>&Mii szerkesztÅ‘ megnyitása</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&TAS konfigurálása...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>J&elenlegi játék konfigurálása...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&IndÃtás</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&VisszaállÃtás</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>F&elvétel</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>&VezérlÅ‘ menü megnyitása</translation> </message> diff --git a/dist/languages/id.ts b/dist/languages/id.ts index 639280ea6..f61cf62c4 100644 --- a/dist/languages/id.ts +++ b/dist/languages/id.ts @@ -671,759 +671,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC Kustom</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Catatan: ini dapat diubah ketika pengaturan wilayah diotomatiskan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Wilayah:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Zona Waktu:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Tanyakan pengguna ketika memulai permainan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Jeda pengemulasian ketika berada di latar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Sembunyikan mouse saat tidak aktif</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Shader perakit, hanya NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Tinggi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Otomatis</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Akurat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Berbahaya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Layar Tanpa Batas</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Layar Penuh Eksklusif</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Tidak ada Keluaran Suara</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Penguraian Video menggunakan CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Penguraian Video menggunakan GPU (Bawaan)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EKSPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest Neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Biliner</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bikubik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussian</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Tak ada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Bawaan (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Paksa 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Paksa 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Regangkan ke Layar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Otomatis</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Bawaan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Jepang (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Prancis (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Jerman (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italia (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spanyol (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Cina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Korea (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Belanda (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugis (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Rusia (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Inggris Britania</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Prancis Kanada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Spanyol Amerika Latin</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Cina Sederhana</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Cina Tradisional (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Portugis Brazil (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Jepang</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA (Amerika Serikat)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Eropa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Tiongkok</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Kuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Mesir</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Éire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB (Britania Raya)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Éire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islandia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ (Selandia Baru)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polandia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapura</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turki</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Terpasang</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Jinjing</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2273,33 +2273,33 @@ Memungkinkan berbagai macam optimasi IR.</translation> <translation>Warna Latar:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Mati</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Direkomendasikan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Nyala</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation type="unfinished"/> </message> @@ -3365,6 +3365,15 @@ Untuk membalikkan sumbu, pertama gerakkan joystik secara tegak lurus, lalu menda </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3699,42 +3708,47 @@ Current values are %1% and %2% respectively.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Pengaya (Add-On)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Sistem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafis</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Ljtan. Grafik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Properti</translation> </message> @@ -3838,67 +3852,67 @@ Current values are %1% and %2% respectively.</source> <translation>Masukkan nama pengguna untuk pengguna baru:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Masukkan nama pengguna baru:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Pilih Gambar Pengguna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Gambar JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Kesalahan ketika menghapus gambar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Kesalahan saat mencoba menimpa gambar sebelumnya di: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Kesalahan saat menghapus berkas</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Tak dapat menghapus berkas yang ada: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Kesalahan saat menciptakan direktori pengguna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Tidak bisa menciptakan direktori %1 untuk menyimpan gambar pengguna.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Kesalahan ketika menyalin gambar pengguna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Gagal menyalin berkas dari %1 ke %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Kesalahan ketika mengubah ukuran gambar pengguna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Tidak dapat mengubah ukuran gambar</translation> </message> @@ -3906,17 +3920,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Konfirmasi Penghapusan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation type="unfinished"/> @@ -4069,7 +4083,7 @@ UUID: %2</source> <translation>Core</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4780,1092 +4794,1032 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Memuat Applet Web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Matikan Applet Web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Pengali skala resolusi yang terpilih.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Membunyikan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Bisukan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Atur ulang tingkat suara</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Bersihkan Berkas Baru-baru Ini</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Lanjutkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Jeda</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Peringatan Format Permainan yang Usang</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Kesalahan ketika memuat ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>Format ROM tak didukung.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Simpan Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Gagal Membuka Folder %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Folder tak ada!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Error saat menghapus konten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Error saat menghapus Update</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Error saat menghapus DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Hapus Konten Game yang terinstall?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Hapus Update Game yang terinstall?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Hapus DLC Game yang terinstall?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Hapus Masukan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Berhasil menghapus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Hapus File</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>Kesalahan Menghapus Transferable Shader Cache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Kesalahan Menghapus Konfigurasi Buatan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Pengekstrakan RomFS Gagal!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Penuh</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Skeleton</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Pilih Mode Dump RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Mengekstrak RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Batal</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Pengekstrakan RomFS Berhasil!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Operasi selesai dengan sukses,</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Buat Pintasan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Buat ikon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Gagal membuka %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Pilih Direktori</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Properti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Muat Berkas</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Buka Direktori ROM Terekstrak</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Direktori Terpilih Tidak Sah</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Install File</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Memasang berkas "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Hasil Install</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Aplikasi Sistem</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Arsip Sistem</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Pembaruan Aplikasi Sistem</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Paket Perangkat Tegar (Tipe A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Paket Perangkat Tegar (Tipe B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Permainan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Pembaruan Permainan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC Permainan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Judul Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Pilih Tipe Pemasangan NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Gagal Memasang</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Berkas tak ditemukan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Berkas "%1" tak ditemukan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Akun yuzu Hilang</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Kesalahan saat membuka URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Tidak dapat membuka URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Rekaman TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Timpa file pemain 1? </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Konfigurasi tidak sah terdeteksi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Berkas Amiibo (%1);; Semua Berkas (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Muat Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Gagal memuat data Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Tangkapan Layar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Berkas PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Status TAS: Berjalan %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Status TAS: Merekam %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Status TAS: Diam %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Status TAS: Tidak Valid</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Matikan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Mulai</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Berhenti Mer&ekam</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>R&ekam</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>Membangun: %n shader(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Kecepatan: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Kecepatan: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Permainan: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>TANPA AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUME : SENYAP</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- Kehilangan BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- Kehilangan BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- Kehilangan PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Memuat kunci... -Ini mungkin memakan waktu hingga satu menit -tergantung dari sistem performa Anda.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Pilih Target Dump RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>Silahkan pilih jenis RomFS yang ingin Anda buang.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Apakah Anda yakin untuk menghentikan emulasi? Setiap progres yang tidak tersimpan akan hilang.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6141,62 +6095,62 @@ Would you like to bypass this and exit anyway?</source> <translation>Properti</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Memindai subfolder</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Buka Lokasi Direktori</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Bersihkan</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nama</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatibilitas</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Pengaya (Add-On)</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Tipe berkas</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Ukuran</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6267,7 +6221,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Klik dua kali untuk menambahkan folder sebagai daftar permainan.</translation> </message> @@ -6280,12 +6234,12 @@ Would you like to bypass this and exit anyway?</source> <translation type="unfinished"><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Masukkan pola untuk memfilter</translation> </message> @@ -6795,176 +6749,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Munculkan Status Bar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Buka %Panduan cepat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Mulai</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>R&ekam</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/it.ts b/dist/languages/it.ts index 8c26211aa..34aeffc97 100644 --- a/dist/languages/it.ts +++ b/dist/languages/it.ts @@ -684,759 +684,759 @@ Le compute pipeline sono sempre abilitate su tutti gli altri driver.</translatio </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC Personalizzato</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Lingua:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Nota: Può essere rimpiazzato se il fuso orario della Regione è impostato su Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Regione:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Fuso orario:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Modalità di output del suono:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>Modalità console:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Richiedi utente all'avvio di un gioco</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Metti in pausa l'emulazione quando la finestra è in background</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Chiedi conferma prima di arrestare l'emulazione</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Nascondi il puntatore del mouse se inattivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Disabilita l'applet controller</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>Abilita Gamemode</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU (Asincrono)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Nessuna compressione (qualità migliore)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (qualità bassa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (qualità media)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Nullo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (shader assembly, solo NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (sperimentale, solo Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (SPERIMENTALE, solo AMD/MESA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normale</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Alta</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Estrema</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Automatico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Accurata</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Non sicura</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoica (disabilita la maggior parte delle ottimizzazioni)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>Dynarmic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Finestra senza bordi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Esclusivamente a schermo intero</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Nessun output video</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Decodifica video CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Decodifica video GPU (predefinita)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [SPERIMENTALE]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [SPERIMENTALE]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [SPERIMENTALE]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilineare</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussiano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Nessuna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Predefinito (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Forza 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Forza 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Forza 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Allunga a finestra</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automatico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Predefinito</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Giapponese (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Inglese americano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Francese (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Tedesco (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italiano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spagnolo (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Cinese</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Coreano (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Olandese (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portoghese (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russo (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanese</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Inglese britannico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Francese canadese</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Spagnolo latino-americano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Cinese semplificato</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Cinese tradizionale (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Portoghese brasiliano (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Giappone</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Cina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Corea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Automatico (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Predefinito (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egitto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islanda</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israele</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Giamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polonia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portogallo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turchia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universale</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (Predefinito)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (Non sicuro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (Non sicuro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Dock</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Portatile</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Chiedi sempre (Predefinito)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Solo se il gioco richiede di non essere arrestato</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>Non chiedere mai</translation> </message> @@ -1898,12 +1898,12 @@ Le compute pipeline sono sempre abilitate su tutti gli altri driver.</translatio <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="384"/> <source><html><head/><body><p>When checked, disables reordering of mapped memory uploads which allows to associate uploads with specific draws. May reduce performance in some cases.</p></body></html></source> - <translation type="unfinished"/> + <translation><html><head/><body><p>Quando abilitato, il riordinamento della memoria già mappata viene disabilitato. In alcuni casi, può ridurre le performance.</p></body></html></translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="387"/> <source>Disable Buffer Reorder</source> - <translation type="unfinished"/> + <translation>Disabilita il Riordinamento del Buffer</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="397"/> @@ -2314,33 +2314,33 @@ Le compute pipeline sono sempre abilitate su tutti gli altri driver.</translatio <translation>Colore dello sfondo:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Disattivato</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync disattivato</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Consigliata</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Attivato</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync attivato</translation> </message> @@ -2436,7 +2436,7 @@ Le compute pipeline sono sempre abilitate su tutti gli altri driver.</translatio <message> <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="330"/> <source>An error occurred. Please report this issue on github.</source> - <translation type="unfinished"/> + <translation>Errore durante la configurazione. Segnala quest'errore alla pagina Github di Yuzu.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="370"/> @@ -3406,6 +3406,15 @@ Per invertire gli assi, prima muovi la levetta verticalmente, e poi orizzontalme </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3745,42 +3754,47 @@ Per attivarlo, disattiva il mouse emulato.</translation> <translation>Alcune impostazioni sono disponibili soltanto quando un gioco non è in esecuzione.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Add-on</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Sistema</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Grafica (Avanzate)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Profili di input</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Proprietà </translation> </message> @@ -3884,67 +3898,67 @@ Per attivarlo, disattiva il mouse emulato.</translation> <translation>Inserisci un nome utente per il nuovo utente:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Inserisci un nuovo nome utente:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Seleziona immagine utente</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Immagini JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Impossibile eliminare l'immagine</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Impossibile sovrascrivere l'immagine precedente in: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Impossibile eliminare il file</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Impossibile eliminare il file già esistente: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Impossibile creare la cartella delle immagini dell'utente</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Impossibile creare la cartella %1 per archiviare le immagini dell'utente.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Impossibile copiare l'immagine utente</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Impossibile copiare l'immagine da %1 a %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Impossibile ridimensionare l'immagine utente</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Impossibile ridimensionare l'immagine</translation> </message> @@ -3952,17 +3966,17 @@ Per attivarlo, disattiva il mouse emulato.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Eliminare questo utente? Tutti i suoi dati di salvataggio verranno rimossi.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Conferma eliminazione</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Nome: %1 @@ -4116,7 +4130,7 @@ UUID: %2</translation> <translation>Core</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4828,44 +4842,44 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Rilevata installazione di Vulkan non funzionante</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Gioco in esecuzione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Caricamento dell'applet web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Disabilita l'applet web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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>Disabilitare l'applet web potrebbe causare dei comportamenti indesiderati. @@ -4873,558 +4887,558 @@ Da usare solo con Super Mario 3D All-Stars. Sei sicuro di voler procedere? (Puoi riabilitarlo quando vuoi nelle impostazioni di Debug.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>Il numero di shader in fase di compilazione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Il moltiplicatore corrente dello scaling della risoluzione.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Riattiva</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Silenzia</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Reimposta volume</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Cancella i file recenti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Continua</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pausa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Formato del gioco obsoleto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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 contenente una ROM decostruita per avviare questo gioco, che è un formato obsoleto e sostituito da NCA, NAX, XCI o NSP. Le ROM decostruite non hanno icone, metadati e non supportano gli aggiornamenti. <br><br>Per una spiegazione sui vari formati della Switch supportati da yuzu, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>consulta la nostra wiki (in inglese)</a>. Non riceverai di nuovo questo avviso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Errore nel caricamento della ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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 riscontrato un problema durante l'avvio del core video. Di solito questo errore è causato da driver GPU obsoleti, compresi quelli integrati. Consulta il log per maggiori dettagli. Se hai bisogno di aiuto per accedere ai log, consulta questa pagina (in inglese): <a href='https://yuzu-emu.org/help/reference/log-files/'>Come caricare i file di log</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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 dare un occhiata alla wiki di yuzu (in inglese)</a> o al server Discord di yuzu</a> per assistenza.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Chiusura del software in corso...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Dati di salvataggio</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Dati delle mod</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Impossibile aprire la cartella %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>La cartella non esiste!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Impossibile rimuovere il contentuto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Impossibile rimuovere l'aggiornamento</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Impossibile rimuovere il DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Rimuovere il contenuto del gioco installato?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Rimuovere l'aggiornamento installato?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Rimuovere il DLC installato?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Rimuovi voce</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Rimozione completata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>Aggiornamento rimosso con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 DLC rimossi con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <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="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <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="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <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="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Rimuovere la configurazione personalizzata del gioco?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Rimuovere la Storage Cache?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Rimuovi file</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>Reimposta il tempo di gioco</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>Vuoi reimpostare il tempo di gioco?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <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="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <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="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Impossibile rimuovere la configurazione personalizzata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Estrazione RomFS fallita!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Completa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Cartelle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Seleziona la modalità di estrazione della RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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>Non c'è abbastanza spazio disponibile nel disco %1 per estrarre la RomFS. Libera lo spazio o seleziona una cartella di estrazione diversa in Emulazione > Configura > Sistema > File system > Cartella di estrazione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Estrazione RomFS in corso...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Annulla</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Estrazione RomFS riuscita!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>L'operazione è stata completata con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>Impossibile verificare l'integrità dei file.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>I contenuti di questo file non sono stati verificati.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Verifica dell'integrità fallita!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>I contenuti del file potrebbero essere corrotti.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Verifica dell'integrità della ROM in corso...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Verifica dell'integrità completata con successo!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Verifica dell'integrità fallita!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>I contenuti del file potrebbero essere corrotti.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Crea scorciatoia</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>Vuoi avviare il gioco a schermo intero?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <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="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>Impossibile creare la scorciatoia in %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Crea icona</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Impossibile aprire %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Seleziona cartella</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Proprietà </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Carica file</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Apri cartella ROM estratta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Cartella selezionata non valida</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Installa file</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Installazione del file "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Risultati dell'installazione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n nuovo file è stato installato @@ -5433,7 +5447,7 @@ Usa questa funzione solo per installare aggiornamenti e DLC.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n file è stato sovrascritto @@ -5442,7 +5456,7 @@ Usa questa funzione solo per installare aggiornamenti e DLC.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n file non è stato installato a causa di errori @@ -5451,195 +5465,195 @@ Usa questa funzione solo per installare aggiornamenti e DLC.</translation> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Applicazione di sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Archivio di sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Aggiornamento di un'applicazione di sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Pacchetto firmware (tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Pacchetto firmware (tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Gioco</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Aggiornamento di gioco</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Titolo delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Seleziona il tipo di installazione NCA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Installazione fallita</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>File non trovato</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>File "%1" non trovato</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Requisiti hardware non soddisfatti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Account di yuzu non trovato</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Impossibile aprire l'URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Registrazione TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <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="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Rilevata configurazione non valida</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>L'Amiibo corrente è stato rimosso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>Il gioco in uso non è alla ricerca di Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>File Amiibo (%1);; Tutti i file (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Carica Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Impossibile caricare i dati dell'Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5648,291 +5662,225 @@ Configurazione &gt; Web.</translation> %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>Nessun firmware disponibile</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>Devi installare il firmware per usare l'applet dell'album.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>Applet Album</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>L'applet dell'album non è disponibile. Reinstalla il firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>Devi installare il firmware per usare l'applet Cabinet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Applet Cabinet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>L'applet del Cabinet non è disponibile. Reinstalla il firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Devi installare il firmware per usare l'editor dei Mii.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Editor dei Mii</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>L'editor dei Mii non è disponibile. Reinstalla il firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>Devi installare il firmware per usare il menù dei controller.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet controller</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>Il menù dei controller non è disponibile. Reinstalla il firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Cattura screenshot</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Immagine PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Stato TAS: In esecuzione (%1/%2)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Stato TAS: Registrazione in corso (%1)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Stato TAS: In attesa (%1/%2)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Stato TAS: Non valido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Interrompi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Avvia</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Interrompi r&egistrazione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>R&egistra</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Risoluzione: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Velocità : %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Velocità : %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Gioco: %1 FPS (Sbloccati)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Gioco: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUME: MUTO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Conferma ri-derivazione chiavi</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Stai per forzare la ri-derivazione di tutte le tue chiavi di crittografia. -Se non sai cosa significa o cosa stai per fare, -questa azione potrebbe fare danni. -Se sei sicuro di voler procedere, -è consigliato fare dei backup. - -Questa azione eliminerà i tuoi file delle chiavi autogenerati e ripeterà il processo di derivazione delle chiavi.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>Fusi mancanti</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - BOOT0 mancante</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - BCPKG2-1-Normal-Main mancante</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- PRODINFO mancante</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Componenti di derivazione mancanti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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 firmware e i giochi.<br><br><small>(%1)</small></translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Derivazione chiavi... -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="4788"/> - <source>Deriving Keys</source> - <translation>Derivazione chiavi</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Decrittazione dell'archivio di sistema fallita</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Le chiavi di crittografia non sono riuscite a decrittare il firmware. <br>Segui <a href='https://yuzu-emu.org/help/quickstart/'>la guida introduttiva di yuzu</a> per estrarre tutte le tue chiavi, il firmware e i giochi dalla tua Switch.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Seleziona Target dell'Estrazione del RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6210,62 +6158,62 @@ Vuoi forzare l'arresto?</translation> <translation>Proprietà </translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Scansiona le sottocartelle</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Rimuovi cartella dei giochi</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Sposta in alto</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Sposta in basso</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Apri cartella</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Cancella</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nome</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Compatibilità </translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Add-on</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Tipo di file</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Dimensione</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>Tempo di gioco</translation> </message> @@ -6336,7 +6284,7 @@ Vuoi forzare l'arresto?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Clicca due volte per aggiungere una nuova cartella alla lista dei giochi</translation> </message> @@ -6349,12 +6297,12 @@ Vuoi forzare l'arresto?</translation> <translation><numerusform>%1 di %n risultato</numerusform><numerusform>%1 di %n risultati</numerusform><numerusform>%1 di %n risultati</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filtro:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Inserisci pattern per filtrare</translation> </message> @@ -6866,176 +6814,171 @@ Messaggio di debug:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Reinizializza chiavi...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>&Verifica i contenuti installati</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Informazioni su yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>&Modalità finestra singola</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Configura...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Visualizza le intestazioni del dock dei widget</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Mostra barra del &filtro</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Mostra barra di &stato</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Mostra barra di stato</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Sfoglia lobby di gioco pubblica</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Crea stanza</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Esci dalla stanza</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>Collegamento &diretto alla stanza</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Mostra stanza attuale</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>Schermo intero</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Riavvia</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Carica/Rimuovi &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Segnala la compatibilità </translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Apri la pagina delle &mod</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Apri la &guida introduttiva</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&Domande frequenti</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Apri la cartella di yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>Cattura schermo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>Apri l'&album</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&Imposta nickname e proprietario</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>&Rimuovi i dati di gioco</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&Ripristina gli Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>&Formatta gli Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>Apri l'&editor dei Mii</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Configura TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Configura il gioco in uso...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Avvia</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Reimposta</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>R&egistra</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>Apri il menù dei &controller</translation> </message> diff --git a/dist/languages/ja_JP.ts b/dist/languages/ja_JP.ts index c7f7fa3a7..75ff00fc1 100644 --- a/dist/languages/ja_JP.ts +++ b/dist/languages/ja_JP.ts @@ -410,7 +410,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="41"/> <source>Memory Layout</source> - <translation type="unfinished"/> + <translation>メモリレイアウト</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="43"/> @@ -425,7 +425,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="47"/> <source>Backend:</source> - <translation type="unfinished"/> + <translation>ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ï¼š</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="54"/> @@ -631,7 +631,7 @@ Immediate (no synchronization) ã¯åˆ©ç”¨å¯èƒ½ãªã‚‚ã®ã‚’何ã§ã‚‚利用ã—, ム<message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="126"/> <source>Enable Compute Pipelines (Intel Vulkan Only)</source> - <translation type="unfinished"/> + <translation>ã‚³ãƒ³ãƒ”ãƒ¥ãƒ¼ãƒˆãƒ»ãƒ‘ã‚¤ãƒ—ãƒ©ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–ï¼ˆã‚¤ãƒ³ãƒ†ãƒ« Vulkan ã®ã¿ï¼‰</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="127"/> @@ -682,759 +682,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>カスタムRTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>言語:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>注æ„:地域ãŒè‡ªå‹•é¸æŠžã®å ´åˆã€è¨å®šãŒä¸Šæ›¸ãã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>地域:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>タイムゾーン:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>音声出力モード:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>ゲーム起動時ã«ç¢ºèªã‚’表示</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–時ã«ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ä¸€æ™‚åœæ¢</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åœæ¢ã™ã‚‹å‰ã«ç¢ºèªã™ã‚‹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–時ã«ãƒžã‚¦ã‚¹ã‚«ãƒ¼ã‚½ãƒ«ã‚’éš ã™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>コントãƒãƒ¼ãƒ©ãƒ¼ã‚¢ãƒ—レットã®ç„¡åŠ¹åŒ–</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU éžåŒæœŸ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>圧縮ã—ãªã„ (最高å“質)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (低å“質)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (ä¸å“質)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (アセンブリシェーダーã€NVIDIA ã®ã¿)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (実験的, Mesa ã®ã¿)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V(実験的ã€AMD/Mesaã®ã¿ï¼‰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>標準</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>高</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>自動</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>æ£ç¢º</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>ä¸å®‰å®š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>パラノイド (ã»ã¨ã‚“ã©ã®æœ€é©åŒ–を無効化)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> - <translation type="unfinished"/> + <translation>Dynarmic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> - <translation type="unfinished"/> + <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>ボーダーレスウィンドウ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>排他的フルスクリーン</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>ビデオ出力ã—ãªã„</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>ビデオをCPUã§ãƒ‡ã‚³ãƒ¼ãƒ‰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>ビデオをGPUã§ãƒ‡ã‚³ãƒ¼ãƒ‰ (デフォルト)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [実験的]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [実験的]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [実験的]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest Neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussian</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>ãªã—</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>デフォルト (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>強制 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>強制 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>強制 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>ウィンドウã«åˆã‚ã›ã‚‹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>自動</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>デフォルト</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>日本語</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>アメリカ英語</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>フランス語 (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>ドイツ語 (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>イタリア語 (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>スペイン語 (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>ä¸å›½èªž</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>韓国語 (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>オランダ語 (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>ãƒãƒ«ãƒˆã‚¬ãƒ«èªž (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>ãƒã‚·ã‚¢èªž (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>å°æ¹¾èªž</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>イギリス英語</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>カナダフランス語</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>ラテンアメリカスペイン語</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>簡体å—ä¸å›½èªž</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>ç¹ä½“å—ä¸å›½èªž (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>ブラジルãƒãƒ«ãƒˆã‚¬ãƒ«èªž (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>日本</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>アメリカ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>ヨーãƒãƒƒãƒ‘</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>オーストラリア</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>ä¸å›½</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>韓国</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>å°æ¹¾</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>自動 (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>既定 (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>ä¸å¤®ãƒ¨ãƒ¼ãƒãƒƒãƒ‘時間</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>ã‚ューãƒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>æ±ãƒ¨ãƒ¼ãƒãƒƒãƒ‘標準時</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>エジプト</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>アイルランド</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>アメリカæ±éƒ¨æ¨™æº–時</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>イギリス-アイルランド</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>グリニッジ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>香港</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>ãƒãƒ¯ã‚¤æ¨™æº–時</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>アイスランド</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>イラン</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>イスラエル</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>ジャマイカ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>クェゼリン</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>リビア</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>䏿±æ™‚é–“</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>ナãƒãƒ›</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>ãƒãƒ¼ãƒ©ãƒ³ãƒ‰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>ãƒãƒ«ãƒˆã‚¬ãƒ«</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>シンガãƒãƒ¼ãƒ«</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>トルコ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>ユニãƒãƒ¼ã‚µãƒ«</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>ズールー</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>モノラル</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>ステレオ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>サラウンド</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (デフォルト)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (ä¸å®‰å®š)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (ä¸å®‰å®š)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Docked</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>æºå¸¯ãƒ¢ãƒ¼ãƒ‰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>常ã«ç¢ºèªã™ã‚‹ (デフォルト)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>ゲームãŒåœæ¢ã—ãªã„よã†ã«æŒ‡å®šã—ã¦ã„ã‚‹ã¨ãã®ã¿</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>確èªã—ãªã„</translation> </message> @@ -1521,7 +1521,7 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="65"/> <source>CPU Backend</source> - <translation type="unfinished"/> + <translation>CPUãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="95"/> @@ -2268,7 +2268,7 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="52"/> <source>Linux</source> - <translation type="unfinished"/> + <translation>Linux</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="109"/> @@ -2314,33 +2314,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>背景色:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>オフ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync オフ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>推奨</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>オン</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync オン</translation> </message> @@ -3406,6 +3406,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3740,42 +3749,47 @@ Current values are %1% and %2% respectively.</source> <translation>ã„ãã¤ã‹ã®è¨å®šã¯ã‚²ãƒ¼ãƒ ãŒå®Ÿè¡Œä¸ã§ãªã„ã¨ãã®ã¿è¨å®šã§ãã¾ã™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>アドオン</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>システム</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>グラフィック</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>高度ãªã‚°ãƒ©ãƒ•ィック</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>サウンド</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>入力プãƒãƒ•ァイル</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>プãƒãƒ‘ティ</translation> </message> @@ -3879,67 +3893,67 @@ Current values are %1% and %2% respectively.</source> <translation>æ–°ã—ã„ユーザã®ãƒ¦ãƒ¼ã‚¶åを入力:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>æ–°ã—ã„ユーザåを入力:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>ユーザ画åƒã‚’é¸æŠž </translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEGç”»åƒ (*.jpg *.jpeg) </translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>ç”»åƒå‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>æ—¢å˜ç”»åƒã®ä¸Šæ›¸ã時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %1 </translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>ファイル削除エラー</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>ファイルを削除ã§ãã¾ã›ã‚“ã§ã—ãŸ: %1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>ユーザー画åƒãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªä½œæˆå¤±æ•—</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>ユーザー画åƒä¿å˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªâ€%1â€ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>ユーザー画åƒã‚³ãƒ”ーエラー</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>ç”»åƒã‚’â€%1â€ã‹ã‚‰â€%2â€ã¸ã‚³ãƒ”ー出æ¥ã¾ã›ã‚“ã§ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>ユーザ画åƒã®ãƒªã‚µã‚¤ã‚ºã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>ç”»åƒã‚’リサイズã§ãã¾ã›ã‚“</translation> </message> @@ -3947,17 +3961,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除ã—ã¾ã™ã‹? ã“ã®ãƒ¦ãƒ¼ã‚¶ã®ã™ã¹ã¦ã®ã‚»ãƒ¼ãƒ–データãŒå‰Šé™¤ã•れã¾ã™.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>ユーザã®å‰Šé™¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>åç§°: %1 @@ -4111,7 +4125,7 @@ UUID: %2</translation> <translation>コア</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4823,809 +4837,809 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>テレメトリ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>壊れãŸVulkanã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒæ¤œå‡ºã•れã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Webアプレットをãƒãƒ¼ãƒ‰ä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Webアプレットã®ç„¡åŠ¹åŒ–</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>ビルドä¸ã®ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼æ•°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>ç¾åœ¨é¸æŠžã•れã¦ã„ã‚‹è§£åƒåº¦ã®å€çŽ‡ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>消音解除</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>消音</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>音é‡ã‚’リセット</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>最近ã®ãƒ•ァイルをクリア(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>å†é–‹(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>䏿–(&P)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>å¤ã„ゲームフォーマットã®è¦å‘Š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>ROMãƒãƒ¼ãƒ‰ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>ã“ã®ROMフォーマットã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>ãƒ“ãƒ‡ã‚ªã‚³ã‚¢åˆæœŸåŒ–ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>䏿˜Žãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚詳細ã¯ãƒã‚°ã‚’確èªã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>ソフトウェアを終了ä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>データã®ã‚»ãƒ¼ãƒ–</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Modデータ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>â€%1â€ãƒ•ォルダを開ã‘ã¾ã›ã‚“ã§ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>フォルダãŒå˜åœ¨ã—ã¾ã›ã‚“ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>シェーダーã‚ャッシュを開ã‘ã¾ã›ã‚“ã§ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ç”¨ã®ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚ャッシュディレクトリã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>コンテンツã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>アップデートã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>DLC ã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã®ã‚¢ãƒƒãƒ—デートを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã® DLC を削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>エントリ削除</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>削除ã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã‚’æ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>インストールã•れãŸã‚¢ãƒƒãƒ—デートをæ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã®ã‚¢ãƒƒãƒ—デートã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã«ã¯DLCãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>ï¼…1ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸDLCã‚’æ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>OpenGLシェーダーã‚ャッシュを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Vulkanシェーダーã‚ャッシュを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>ã™ã¹ã¦ã®ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚ャッシュを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã®ã‚«ã‚¹ã‚¿ãƒ è¨å®šã‚’削除ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>ã‚ャッシュストレージを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>ファイル削除</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>ãƒ—ãƒ¬ã‚¤æ™‚é–“æƒ…å ±ã‚’å‰Šé™¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>プレイ時間をリセットã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>シェーダーã‚ャッシュã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ç”¨ã®ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚ャッシュã¯å˜åœ¨ã—ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>シェーダーã‚ャッシュをæ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>シェーダーã‚ャッシュã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>シェーダーã‚ャッシュã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>シェーダーã‚ャッシュをæ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>シェーダーã‚ャッシュディレクトリã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>カスタムè¨å®šã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã®ã‚«ã‚¹ã‚¿ãƒ è¨å®šã¯å˜åœ¨ã—ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>カスタムè¨å®šã‚’æ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>カスタムè¨å®šã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFSã®æŠ½å‡ºã«å¤±æ•—ã—ã¾ã—ãŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>フル</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>スケルトン</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>RomFSダンプモードã®é¸æŠž</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>RomFSを抽出ä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>ã‚ャンセル</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS抽出æˆåŠŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>æ“ä½œã¯æˆåŠŸã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>æ•´åˆæ€§ã®ç¢ºèªã‚’実行ã§ãã¾ã›ã‚“ã§ã—ãŸ!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>ファイルã®å¦¥å½“性ã¯ç¢ºèªã•れã¾ã›ã‚“ã§ã—ãŸ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>æ•´åˆæ€§ã®ç¢ºèªã«å¤±æ•—ã—ã¾ã—ãŸ!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>ファイルãŒç ´æã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>æ•´åˆæ€§ã‚’確èªä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>æ•´åˆæ€§ã®ç¢ºèªã«æˆåŠŸã—ã¾ã—ãŸ!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>æ•´åˆæ€§ã®ç¢ºèªã«å¤±æ•—ã—ã¾ã—ãŸ!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>ファイルãŒç ´æã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>ショートカットを作æˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>フルスクリーンã§ã‚²ãƒ¼ãƒ ã‚’èµ·å‹•ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>%1 ã¸ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆä½œæˆã«æˆåŠŸã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>%1 ã¸ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>アイコンを作æˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>â€%1â€ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>ディレクトリã®é¸æŠž</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>プãƒãƒ‘ティ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>ゲームプãƒãƒ‘ティをãƒãƒ¼ãƒ‰å‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>ファイルã®ãƒãƒ¼ãƒ‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>展開ã•れã¦ã„ã‚‹ROMディレクトリを開ã</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒé¸æŠžã•れã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>ファイルã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>残り %n ファイル</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>"%1"ファイルをインストールã—ã¦ã„ã¾ã™ãƒ»ãƒ»ãƒ»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«çµæžœ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ–°ãŸã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã—㟠</numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n ファイルãŒä¸Šæ›¸ãã•れã¾ã—㟠</numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n ファイルã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—㟠</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>システムアプリケーション</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>システムアーカイブ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>システムアプリケーションアップデート</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>ファームウェアパッケージ(Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>ファームウェアパッケージ(Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>ゲーム</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>ゲームアップデート</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>ゲームDLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>差分タイトル</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>NCAã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ç¨®åˆ¥ã‚’é¸æŠžãƒ»ãƒ»ãƒ»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>インストール失敗</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>é¸æŠžã•れãŸNCAã®ã‚¿ã‚¤ãƒˆãƒ«ç¨®åˆ¥ãŒç„¡åйã§ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>ファイルãŒå˜åœ¨ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>ファイルâ€%1â€ãŒå˜åœ¨ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>yuzuアカウントãŒå˜åœ¨ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>URLオープンエラー</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>URL"%1"ã‚’é–‹ã‘ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation> TAS 記録ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>プレイヤー1ã®ãƒ•ァイルを上書ãã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>無効ãªè¨å®šã‚’検出ã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>ç¾åœ¨ã® amiibo ã¯å‰Šé™¤ã•れã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>エラー</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>ç¾åœ¨ã®ã‚²ãƒ¼ãƒ ã¯amiiboã‚’è¦æ±‚ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>amiiboファイル (%1);;ã™ã¹ã¦ã®ãƒ•ァイル (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>amiiboã®ãƒãƒ¼ãƒ‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>amiiboデータèªã¿è¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>é¸æŠžã•れãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯æœ‰åŠ¹ãª amiibo ã§ã¯ã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>é¸æŠžã•れãŸãƒ•ァイルã¯ã™ã§ã«ä½¿ç”¨ä¸ã§ã™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>䏿˜Žãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5634,291 +5648,225 @@ Please, only use this feature to install updates and DLC.</source> %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>ファームウェアãŒã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>アルãƒãƒ アプレットを使用ã™ã‚‹ã«ã¯ãƒ•ァームウェアをインストールã—ã¦ãã ã•ã„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>アルãƒãƒ アプレット</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>アルãƒãƒ アプレットã¯åˆ©ç”¨å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“. ファームウェアをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>ã‚ャビãƒãƒƒãƒˆã‚¢ãƒ—レット</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>ã‚ャビãƒãƒƒãƒˆã‚¢ãƒ—レットã¯åˆ©ç”¨å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“. ファームウェアをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Mii エディタを使用ã™ã‚‹ã«ã¯ãƒ•ァームウェアをインストールã—ã¦ãã ã•ã„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Mii 編集アプレット</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>Mii エディタã¯åˆ©ç”¨å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“. ファームウェアをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>コントãƒãƒ¼ãƒ©ãƒ¼ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’使用ã™ã‚‹ã«ã¯ãƒ•ァームウェアをインストールã—ã¦ãã ã•ã„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>コントãƒãƒ¼ãƒ©ãƒ¼ アプレット</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>コントãƒãƒ¼ãƒ©ãƒ¼ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¯åˆ©ç”¨å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“. ファームウェアをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>スクリーンショットã®ã‚ャプãƒãƒ£</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNGç”»åƒ (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS 状態: å®Ÿè¡Œä¸ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS 状態: è¨˜éŒ²ä¸ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS 状態: アイドル %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS 状態: 無効</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>å®Ÿè¡Œåœæ¢(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>実行(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>è¨˜éŒ²åœæ¢(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>記録(&R)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>構築ä¸: %n 個ã®ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>拡大率: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>速度:%1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>速度:%1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Game: %1 FPS(制é™è§£é™¤ï¼‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>ゲーム:%1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>フレーム:%1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>音é‡: ミュート</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>音é‡: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>ã‚ーã®å†å–得確èª</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>ã™ã¹ã¦ã®ã‚ーをå†ä½œæˆã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -ã“れãŒä½•ã‚’æ„味ã™ã‚‹ã®ã‹ã€ä½•ã‚’ã—よã†ã¨ã—ã¦ã„ã‚‹ã®ã‹åˆ†ã‹ã‚‰ãªã„å ´åˆã€ -ã“れã¯ç ´å£Šçš„ãªå‡¦ç†ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ -本当ã«å®Ÿè¡Œã™ã¹ã処ç†ã‹ç¢ºèªã—〠-å¿…è¦ã«å¿œã˜ã¦ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‚’å–ã£ã¦ãã ã•ã„。 - -実行ã™ã‚‹ã¨ã€è‡ªå‹•生æˆã•れãŸéµãƒ•ァイルãŒå‰Šé™¤ã•れã€éµç”Ÿæˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå†å®Ÿè¡Œã•れã¾ã™ã€‚</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>ヒューズãŒã‚りã¾ã›ã‚“</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - BOOT0ãŒã‚りã¾ã›ã‚“</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - BCPKG2-1-Normal-MainãŒã‚りã¾ã›ã‚“</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - PRODINFOãŒã‚りã¾ã›ã‚“</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>派生コンãƒãƒ¼ãƒãƒ³ãƒˆãŒã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>ã‚ーを作æˆä¸... -システムã®ãƒ‘フォーマンスã«ã‚ˆã£ã¦ã¯ -1分以上ã‹ã‹ã‚Šã¾ã™ã€‚</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>派生ã‚ー</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>システムアーカイブã®å¾©å·ã«å¤±æ•—ã—ã¾ã—ãŸ</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>RomFSダンプターゲットã®é¸æŠž</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>ダンプã—ãŸã„RomFSã‚’é¸æŠžã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>yuzuを終了ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6196,62 +6144,62 @@ Would you like to bypass this and exit anyway?</source> <translation>プãƒãƒ‘ティ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>サブフォルダをスã‚ャンã™ã‚‹</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>ゲームディレクトリを削除ã™ã‚‹</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² 上ã¸ç§»å‹•</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ 下ã¸ç§»å‹•</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>ディレクトリã®å ´æ‰€ã‚’é–‹ã</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>クリア</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>ゲームå</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>äº’æ›æ€§</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>アドオン</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>ファイル種別</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>ファイルサイズ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>プレイ時間</translation> </message> @@ -6322,7 +6270,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>æ–°ã—ã„ã‚²ãƒ¼ãƒ ãƒªã‚¹ãƒˆãƒ•ã‚©ãƒ«ãƒ€ã‚’è¿½åŠ ã™ã‚‹ã«ã¯ãƒ€ãƒ–ルクリックã—ã¦ãã ã•ã„。</translation> </message> @@ -6335,12 +6283,12 @@ Would you like to bypass this and exit anyway?</source> <translation type="unfinished"><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>フィルター:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>フィルターパターンを入力</translation> </message> @@ -6852,176 +6800,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>éµã‚’å†åˆæœŸåŒ–...(&R)</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>インストールã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を確èª(&V)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>yuzuã«ã¤ã„ã¦(&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>シングルウィンドウモード(&W)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>è¨å®š...(&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>ドックウィジェットヘッダ(&O)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>フィルターãƒãƒ¼ã‚’表示 (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>ステータスãƒãƒ¼(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>ステータスãƒãƒ¼ã®è¡¨ç¤º</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>公開ゲームãƒãƒ“ーをå‚ç…§ (&B)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>ãƒ«ãƒ¼ãƒ ã‚’ä½œæˆ (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>ルームを退出 (&L)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>ルームã«ç›´æŽ¥æŽ¥ç¶š (&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>ç¾åœ¨ã®ãƒ«ãƒ¼ãƒ を表示 (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>全画é¢è¡¨ç¤º(&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>å†å®Ÿè¡Œ(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>&Amiibo ã‚’ãƒãƒ¼ãƒ‰/削除...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>äº’æ›æ€§ã‚’å ±å‘Š(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>&Modページを開ã</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>クイックスタートガイドを開ã(&Q)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>&yuzuフォルダを開ã</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>スクリーンショットをã‚ャプãƒãƒ£(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>アルãƒãƒ ã‚’é–‹ã (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>オーナーã¨ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã‚’è¨å®š (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>ã‚²ãƒ¼ãƒ ãƒ‡ãƒ¼ã‚¿ã®æ¶ˆåŽ» (&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>Amiibo を復旧 (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>Amiibo ã‚’åˆæœŸåŒ–(&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>&Mii エディタを開ã</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>TASã‚’è¨å®š... (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>ç¾åœ¨ã®ã‚²ãƒ¼ãƒ ã‚’è¨å®š...(&U)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>実行(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>リセット(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>記録(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>コントãƒãƒ¼ãƒ©ãƒ¼ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’é–‹ã (&C)</translation> </message> diff --git a/dist/languages/ko_KR.ts b/dist/languages/ko_KR.ts index a7f9b5067..ba141496e 100644 --- a/dist/languages/ko_KR.ts +++ b/dist/languages/ko_KR.ts @@ -682,759 +682,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>ì‚¬ìš©ìž ì§€ì • RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>ì°¸ê³ : ì´ ì„¤ì •ì€ ì§€ì— ì„¤ì •ì´ 'ìžë™ ì„ íƒ'ì¼ ë•Œ 무시ë 수 있습니다.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>êµê°€:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>시계:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>소리 ì¶œë ¥ 모드:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>게임 부팅시 ìœ ì € ì„ íƒ í™”ë©´ 표시</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>백그ë¼ìš´ë“œì— ìžˆì„ ì‹œ ì—ë®¬ë ˆì´ì…˜ ì¼ì‹œì¤‘ì§€</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>비활성 ìƒíƒœì¼ 때 마우스 숨기기</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>컨트롤러 ì• í”Œë¦¿ 비활성화</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>비압축(ìµœê³ í’ˆì§ˆ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1(ì €í’ˆì§ˆ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3(중간 품질)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulcan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM(어셈블리 ì…°ì´ë”, NVIDIA ì „ìš©)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (실험ì , Mesa ì „ìš©)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>보통</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>높ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>ìµìŠ¤íŠ¸ë¦¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>ìžë™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>ì •í™•í•¨</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>최ì í™” (ì•ˆì „í•˜ì§€ 않ìŒ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>편집ì¦(ëŒ€ë¶€ë¶„ì˜ ìµœì í™” 비활성화)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>경계 없는 ì°½ 모드</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>ë…ì ì „ì²´í™”ë©´ 모드</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>비디오 ì¶œë ¥ ì—†ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU 비디오 디코딩</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU 비디오 디코딩(기본값)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [실험ì ]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [실험ì ]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>ìµœê·¼ì ‘ ë³´ê°„</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>가우시안</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>ì—†ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>기본 (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>ê°•ì œ 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>ê°•ì œ 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>ê°•ì œ 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>ì°½ì— ë§žê²Œ 늘림</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>ìžë™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>기본값</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>ì¼ë³¸ì–´ (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>ë¯¸êµ ì˜ì–´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>프랑스어(français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>ë…ì¼ì–´(Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>ì´íƒˆë¦¬ì•„ì–´(italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>스페ì¸ì–´(español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>중êµì–´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>한êµì–´ (Korean)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>네ëœëž€ë“œì–´ (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>í¬ë¥´íˆ¬ê°ˆì–´(português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>러시아어 (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>대만어</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>ì˜ì–´ (British English)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>ìºë‚˜ë‹¤ 프랑스어</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>ë¼í‹´ 아메리카 스페ì¸ì–´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>ê°„ì²´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>중êµì–´ 번체 (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>브ë¼ì§ˆ í¬ë¥´íˆ¬ê°ˆì–´(português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>ì¼ë³¸</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>미êµ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>ìœ ëŸ½</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>호주</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>중êµ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>대한민êµ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>대만</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>ìžë™ (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>기본 (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>ì¤‘ì•™ìœ ëŸ½ 표준시(CET)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>ì¿ ë°”</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>ë™ìœ 럽 표준시(EET)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>ì´ì§‘트</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>ì˜êµ 하계 표준시(GB)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>그리니치 표준시(GMT)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>그리니치</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>í™ì½©</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>하와ì´-알류샨 표준시(HST)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>ì•„ì´ìŠ¬ëž€ë“œ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>ì´ëž€</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>ì´ìФë¼ì—˜</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>ìžë©”ì´ì¹´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>í¬ì™€ìž˜ë¦°</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>리비아</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>ì¤‘ì•™ìœ ëŸ½ 표준시(MET)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>ì‚°ì•… 표준시(MST)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>나바호</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>뉴질랜드 표준시(NZ)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>채텀 표준시(NZ-CHAT)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>í´ëž€ë“œ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>í¬ë¥´íˆ¬ê°ˆ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ë¶í•œ 표준시(ROK)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>싱가í¬ë¥´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>터키</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>í˜‘ì • 세계시(UTC)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>ìœ ëŸ½/모스í¬ë°”(W-SU)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>ì„œìœ ëŸ½</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>줄루</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>모노</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>ìŠ¤í…Œë ˆì˜¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>서ë¼ìš´ë“œ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>거치 모드</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>휴대 모드</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2315,33 +2315,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>배경색:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>ë”</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>수ì§ë™ê¸°í™” ë”</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>추천</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>켬</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>수ì§ë™ê¸°í™” 켬</translation> </message> @@ -3407,6 +3407,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3741,42 +3750,47 @@ Current values are %1% and %2% respectively.</source> <translation>ì¼ë¶€ ì„¤ì •ì€ ê²Œìž„ì´ ì‹¤í–‰ ì¤‘ì´ ì•„ë‹ ë•Œë§Œ ì‚¬ìš©í• ìˆ˜ 있습니다.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>부가 기능</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>시스템</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>그래픽</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>ê³ ê¸‰ 그래픽</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>오디오</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>ìž…ë ¥ 프로파ì¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>ì†ì„±</translation> </message> @@ -3880,67 +3894,67 @@ Current values are %1% and %2% respectively.</source> <translation>새로운 ìœ ì €ë¥¼ 위한 ìœ ì € ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>새로운 ìœ ì € ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>ìœ ì € ì´ë¯¸ì§€ ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG ì´ë¯¸ì§€ (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>ì´ë¯¸ì§€ ì‚ì œ 오류</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>%1ì—서 ì´ì „ ì´ë¯¸ì§€ë¥¼ ë®ì–´ì“°ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>íŒŒì¼ ì‚ì œ 오류</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>기존 파ì¼ì„ ì‚ì œí• ìˆ˜ ì—†ìŒ: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>ì‚¬ìš©ìž ì´ë¯¸ì§€ ë””ë ‰í† ë¦¬ ìƒì„± 오류</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>ì‚¬ìš©ìž ì´ë¯¸ì§€ë¥¼ ì €ìž¥í•˜ê¸° 위한 %1 ë””ë ‰í† ë¦¬ë¥¼ 만들 수 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>ì‚¬ìš©ìž ì´ë¯¸ì§€ 복사 오류</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>ì´ë¯¸ì§€ë¥¼ %1ì—서 %2로 ë³µì‚¬í• ìˆ˜ 없습니다</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>ì‚¬ìš©ìž ì´ë¯¸ì§€ í¬ê¸° ì¡°ì • 오류</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>ì´ë¯¸ì§€ í¬ê¸°ë¥¼ ì¡°ì •í• ìˆ˜ 없습니다</translation> </message> @@ -3948,17 +3962,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>ì´ ì‚¬ìš©ìžë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? 사용ìžì˜ ì €ìž¥ ë°ì´í„°ê°€ ëª¨ë‘ ì‚ì œë©ë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>ì‚ì œ 확ì¸</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>ì´ë¦„: %1 @@ -4112,7 +4126,7 @@ UUID: %2</translation> <translation>코어</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4824,1100 +4838,1034 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>ì›ê²© ì¸¡ì •</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>깨진 Vulkan 설치 ê°ì§€ë¨</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>게임 실행중</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>웹 ì• í”Œë¦¿ì„ ë¡œë“œí•˜ëŠ” 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>웹 ì• í”Œë¦¿ 비활성화</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>현재 ìƒì„±ì¤‘ì¸ ì…°ì´ë”ì˜ ì–‘</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>현재 ì„ íƒëœ í•´ìƒë„ 배율입니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>ìŒì†Œê±° í•´ì œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>ìŒì†Œê±°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>볼륨 ìž¬ì„¤ì •</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>Clear Recent Files(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>재개(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>ì¼ì‹œì¤‘ì§€(&P)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>ì˜¤ëž˜ëœ ê²Œìž„ í¬ë§· ê²½ê³ </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>ROM 로드 중 오류 ë°œìƒ!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>ì§€ì›ë˜ì§€ 않는 롬 í¬ë§·ìž…니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>비디오 코어를 초기화하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>알 수 없는 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ ë¡œê·¸ë¥¼ ì°¸ê³ í•˜ì‹ì‹œì˜¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64비트)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32비트)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>소프트웨어를 닫는 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>세ì´ë¸Œ ë°ì´í„°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>모드 ë°ì´í„°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>%1 í´ë” 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>í´ë”ê°€ 존재하지 않습니다!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>ì´ íƒ€ì´í‹€ì— 대한 ì…°ì´ë” ìºì‹œ ë””ë ‰í† ë¦¬ë¥¼ ìƒì„±í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>콘í…ì¸ ì œê±° 중 오류 ë°œìƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>ì—…ë°ì´íЏ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>DLC ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>ì„¤ì¹˜ëœ ê²Œìž„ 콘í…ì¸ ë¥¼ ì œê±°í•˜ê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>ì„¤ì¹˜ëœ ê²Œìž„ ì—…ë°ì´íŠ¸ë¥¼ ì œê±°í•˜ê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>ì„¤ì¹˜ëœ ê²Œìž„ DLC를 ì œê±°í•˜ê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>í•목 ì œê±°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>ì‚ì œ 완료</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>ì„¤ì¹˜ëœ ê¸°ë³¸ ê²Œìž„ì„ ì„±ê³µì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>ì„¤ì¹˜ëœ ì—…ë°ì´íŠ¸ë¥¼ 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>ì´ íƒ€ì´í‹€ì— 대해 ì„¤ì¹˜ëœ ì—…ë°ì´íŠ¸ê°€ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>ì´ íƒ€ì´í‹€ì— ì„¤ì¹˜ëœ DLCê°€ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>ì„¤ì¹˜ëœ %1 DLC를 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>OpenGL ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Vulkan ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>ëª¨ë“ ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>ì‚¬ìš©ìž ì§€ì • 게임 êµ¬ì„±ì„ ì œê±° í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>ìºì‹œ ì €ìž¥ì†Œë¥¼ ì œê±°í•˜ê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>íŒŒì¼ ì œê±°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>ì´ íƒ€ì´í‹€ì— 대한 ì…°ì´ë” ìºì‹œê°€ 존재하지 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Vulkan 드ë¼ì´ë²„ 파ì´í”„ë¼ì¸ ìºì‹œ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>드ë¼ì´ë²„ 파ì´í”„ë¼ì¸ ìºì‹œë¥¼ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ ë””ë ‰í† ë¦¬ë¥¼ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>ì‚¬ìš©ìž ì§€ì • 구성 ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>ì´ íƒ€ì´í‹€ì— 대한 ì‚¬ìš©ìž ì§€ì • êµ¬ì„±ì´ ì¡´ìž¬í•˜ì§€ 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>ì‚¬ìš©ìž ì§€ì • 게임 êµ¬ì„±ì„ ì„±ê³µì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>ì‚¬ìš©ìž ì§€ì • 게임 êµ¬ì„±ì„ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS 추출 실패!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>ì „ì²´</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>뼈대</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>RomFS ë¤í”„ 모드 ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>RomFS 추출 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>취소</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS ì¶”ì¶œì´ ì„±ê³µí–ˆìŠµë‹ˆë‹¤!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>ìž‘ì—…ì´ ì„±ê³µì 으로 완료ë˜ì—ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> + <translation>무결성 ê²€ì¦ì— 성공했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>무결성 ê²€ì¦ì— 실패했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>바로가기 만들기</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>%1 바로가기를 성공ì 으로 만듬</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>ì•„ì´ì½˜ 만들기</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>%1 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>경로 ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>ì†ì„±</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>게임 ì†ì„±ì„ 로드 í• ìˆ˜ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>íŒŒì¼ ë¡œë“œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>ì¶”ì¶œëœ ROM ë””ë ‰í† ë¦¬ 열기</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>ìž˜ëª»ëœ ë””ë ‰í† ë¦¬ ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>íŒŒì¼ ì„¤ì¹˜</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì´ 남ìŒ</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>íŒŒì¼ "%1" 설치 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>설치 ê²°ê³¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì´ 새로 설치ë˜ì—ˆìŠµë‹ˆë‹¤. </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì„ ë®ì–´ì¼ìŠµë‹ˆë‹¤. </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì„ 설치하지 못했습니다. </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>시스템 ì• í”Œë¦¬ì¼€ì´ì…˜</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>시스템 ì•„ì¹´ì´ë¸Œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>시스템 ì• í”Œë¦¬ì¼€ì´ì…˜ ì—…ë°ì´íЏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>펌웨어 패키지 (A타입)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>펌웨어 패키지 (B타입)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>게임</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>게임 ì—…ë°ì´íЏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>게임 DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>ë¸íƒ€ 타ì´í‹€</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>NCA 설치 ìœ í˜• ì„ íƒ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>설치 실패</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>NCA 타ì´í‹€ ìœ í˜•ì´ ìœ íš¨í•˜ì§€ 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>íŒŒì¼ "%1"ì„ ì°¾ì„ ìˆ˜ 없습니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>하드웨어 요구 사í•ì´ ì¶©ì¡±ë˜ì§€ 않ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>yuzu ê³„ì • 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>URL 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>URL "%1"ì„ ì—´ 수 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS ë ˆì½”ë”©</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>í”Œë ˆì´ì–´ 1ì˜ íŒŒì¼ì„ ë®ì–´ì“°ì‹œê² 습니까?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>ìœ íš¨í•˜ì§€ ì•Šì€ ì„¤ì • ê°ì§€</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>현재 amiiboê°€ ì œê±°ë˜ì—ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>현재 ê²Œìž„ì€ amiibo를 ì°¾ê³ ìžˆì§€ 않습니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo íŒŒì¼ (%1);; ëª¨ë“ íŒŒì¼ (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Amiibo 로드</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Amiibo ë°ì´í„° 로드 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>ì„ íƒí•œ 파ì¼ì€ ìœ íš¨í•œ amiiboê°€ 아닙니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>ì„ íƒí•œ 파ì¼ì€ ì´ë¯¸ 사용 중입니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>알수없는 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>컨트롤러 ì• í”Œë¦¿</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>스í¬ë¦°ìƒ· 캡처</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG ì´ë¯¸ì§€ (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS ìƒíƒœ: %1/%2 실행 중</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS ìƒíƒœ: ë ˆì½”ë”© %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS ìƒíƒœ: ìœ íœ´ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS ìƒíƒœ: ìœ íš¨í•˜ì§€ 않ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>실행 중지(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>시작(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>ë ˆì½”ë”© 중지(&e)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>ë ˆì½”ë“œ(&R)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>빌드중: %nê°œ ì…°ì´ë”</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>스케ì¼: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>ì†ë„: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>ì†ë„: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>게임: %1 FPS (ì œí•œì—†ìŒ)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>게임: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>í”„ë ˆìž„: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>AA ì—†ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>볼륨: ìŒì†Œê±°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>볼륨: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>키 재ìƒì„± 확ì¸</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>ëª¨ë“ í‚¤ë¥¼ ê°•ì œë¡œ 다시 ìƒì„±í•˜ë ¤ê³ 합니다. -ì´ê²ƒì´ ë¬´ì—‡ì„ ì˜ë¯¸í•˜ëŠ”ì§€ ëª¨ë¥´ê³ ì§„í–‰ 시 -파괴ì ì¸ í–‰ë™ì´ ë ê°€ëŠ¥ì„±ì´ ë§¤ìš° 높습니다. -ì •ë§ë¡œ 키를 재ìƒì„± 해야 하는지 확ì¸í•˜ì‹œê³ -필요하다면 ë°±ì—…ì„ ë§Œë“œì‹ì‹œì˜¤. - -ìžë™ ìƒì„±ë˜ì—ˆë˜ 키 파ì¼ë“¤ì´ ì‚ì œë˜ê³ 키 ìƒì„± ëª¨ë“ˆì´ ë‹¤ì‹œ 실행ë©ë‹ˆë‹¤.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>fuses 누ë½</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - BOOT0 누ë½</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - BCPKG2-1-Normal-Main 누ë½</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - PRODINFO 누ë½</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>íŒŒìƒ êµ¬ì„± 요소 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>키 íŒŒìƒ ì¤‘... -시스템 ì„±ëŠ¥ì— ë”°ë¼ ìµœëŒ€ 1 ë¶„ì´ -소요ë 수 있습니다.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>íŒŒìƒ í‚¤</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>시스템 ì•„ì¹´ì´ë¸Œ 암호 í•´ë… ì‹¤íŒ¨</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>암호화 키가 펌웨어를 í•´ë…하지 못했습니다. <br> 암호화 키와 펌웨어 ë° ê²Œìž„ì„ ì–»ê¸°ìœ„í•´<a href='https://yuzu-emu.org/help/quickstart/'> Yuzu ë¹ ë¥¸ 시작 ê°€ì´ë“œ </a>를 따르세요.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>RomFS ë¤í”„ ëŒ€ìƒ ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>ë¤í”„í• RomFS를 ì„ íƒí•˜ì‹ì‹œì˜¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>yuzu를 ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6195,62 +6143,62 @@ Would you like to bypass this and exit anyway?</source> <translation>ì†ì„±</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>하위 í´ë” 스캔</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>게임 ë””ë ‰í† ë¦¬ ì œê±°</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² 위로 ì´ë™</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ 아래로 ì´ë™</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>ë””ë ‰í† ë¦¬ 위치 열기</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>초기화</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>ì´ë¦„</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>호환성</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>부가 기능</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>íŒŒì¼ í˜•ì‹</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>í¬ê¸°</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6321,7 +6269,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>ë”블 í´ë¦í•˜ì—¬ 게임 목ë¡ì— 새 í´ë” 추가</translation> </message> @@ -6334,12 +6282,12 @@ Would you like to bypass this and exit anyway?</source> <translation><numerusform>%1 ì¤‘ì˜ %n ê²°ê³¼</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>í•„í„°:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>검색 í•„í„° ìž…ë ¥</translation> </message> @@ -6851,176 +6799,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>키 ìž¬ì„¤ì •...(&R)</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>yuzu ì •ë³´(&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>싱글 ì°½ 모드(&W)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>ì„¤ì •(&f)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>ë… ìœ„ì ¯ í—¤ë” í‘œì‹œ(&o)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>í•„í„°ë§ ë°” 표시(&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>ìƒíƒœ 표시줄 ë³´ì´ê¸°(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>ìƒíƒœ 표시줄 ë³´ì´ê¸°</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>공개 게임 로비 찾아보기(&B)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>ë°© 만들기(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>ë°©ì—서 나가기(&L)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>ë°©ì— ì§ì ‘ ì—°ê²°(&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>현재 ë°© 표시(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>ì „ì²´ 화면(&u)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>재시작(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Amiibo 로드/ì œê±°(&A)...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>호환성 ë³´ê³ (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>게임 모드 페ì´ì§€ 열기(&M)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>ë¹ ë¥¸ 시작 ê°€ì´ë“œ 열기(&Q)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>FAQ(&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>yuzu í´ë” 열기(&y)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>스í¬ë¦°ìƒ· ì°ê¸°(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>TASì„¤ì •...(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>ì‹¤í–‰ì¤‘ì¸ ê²Œìž„ 맞춤 ì„¤ì •...(&u)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>시작(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>리셋(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>ë ˆì½”ë“œ(&e)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/nb.ts b/dist/languages/nb.ts index 85b51abe4..b4eb1ef55 100644 --- a/dist/languages/nb.ts +++ b/dist/languages/nb.ts @@ -682,759 +682,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Tilpasset Sannhetstidsklokke</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>NB: dette kan bli overstyrt nÃ¥r regionsinnstillingen er satt til auto-valg</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Region:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Tidssone:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Lydutgangsmodus:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Spør om bruker nÃ¥r et spill starter</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Paus emulering nÃ¥r yuzu kjører i bakgrunnen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Gjem mus under inaktivitet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Deaktiver kontroller-appleten</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Ukomprimert (beste kvalitet)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Lav kvalitet)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Medium kvalitet)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (assembly-shader-e, kun med NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Eksperimentell, Kun Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Høy</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Ekstrem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Nøyaktig</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Utrygt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (deaktiverer de fleste optimaliseringer)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Rammeløst vindu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Eksklusiv fullskjerm</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Ingen videoutdata</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Prosessorvideodekoding</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU-videodekoding (standard)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EKSPERIMENTELL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [EXPERIMENTELL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nærmeste nabo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilineær</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bikubisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Ingen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Standard (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Tving 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Tving 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Tving 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Strekk til Vindu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automatisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Standard</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japansk (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Amerikans Engelsk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Fransk (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Tysk (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italiensk (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spansk (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Kinesisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Koreansk (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Nederlandsk (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugisisk (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russisk (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwansk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Britisk Engelsk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Kanadisk Fransk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Latinamerikansk Spansk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Forenklet Kinesisk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Tradisjonell Kinesisk (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Brasiliansk portugisisk (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Kina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Auto (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Normalverdi (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egypt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Island</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Tyrkia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universalt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Dokket</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>HÃ¥ndholdt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2314,33 +2314,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Bakgrunnsfarge:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Av</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync Av</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Anbefalt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>PÃ¥</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync PÃ¥</translation> </message> @@ -3406,6 +3406,15 @@ For Ã¥ invertere aksene, flytt først stikken vertikalt, og sÃ¥ horistonalt.</tr </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3741,42 +3750,47 @@ Gjeldende verdier er henholdsvis %1% og %2%.</translation> <translation>Noen innstillinger er bare tilgjengelige nÃ¥r spillet ikke er i gang.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Tillegg</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>System</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafikk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Avn. Grafikk</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Lyd</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Inndataprofiler</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Egenskaper</translation> </message> @@ -3880,67 +3894,67 @@ Gjeldende verdier er henholdsvis %1% og %2%.</translation> <translation>Tast inn et brukernavn for den nye brukeren:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Skriv inn et nytt brukernavn</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Sett Bruker Bilde</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG Bilder (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Feil ved sletting av bilde</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>En feil oppstod under overskrivelse av det forrige bildet pÃ¥: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Feil ved sletting av fil</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Kunne ikke slette eksisterende fil: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Feil under opprettelse av profilbildemappe</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Kunne ikke opprette mappe %1 for Ã¥ lagre profilbilder.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Feil under kopiering av profilbilde</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Kunne ikke kopiere bilde fra %1 til %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Feil under endring av størrelse pÃ¥ brukerbilde</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Klarte ikke endre bildestørrelse</translation> </message> @@ -3948,17 +3962,17 @@ Gjeldende verdier er henholdsvis %1% og %2%.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Slett denne brukeren? Alle brukerens lagrede data vil bli slettet.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Bekreft Sletting</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Navn: %1 @@ -4112,7 +4126,7 @@ UUID: %2</translation> <translation>Kjerne</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Advarsel: "%1" er ikke et gyldig sprÃ¥k for region "%2"</translation> </message> @@ -4824,601 +4838,601 @@ Dra punkter for Ã¥ endre posisjon, eller dobbelttrykk pÃ¥ tabellfelter for Ã¥ re <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Ødelagt Vulkan-installasjon oppdaget</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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-initialisering mislyktes under oppstart.<br><br>Klikk<a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>her for instruksjoner for Ã¥ løse problemet</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Kjører et spill</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Laster web-applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>SlÃ¥ av web-applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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>Deaktivering av webappleten kan føre til udefinert oppførsel og bør bare brukes med Super Mario 3D All-Stars. Er du sikker pÃ¥ at du vil deaktivere webappleten? (Dette kan aktiveres pÃ¥ nytt i feilsøkingsinnstillingene).</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Den valgte oppløsningsskaleringsfaktoren.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>SlÃ¥ pÃ¥ lyden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Lydløs</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Tilbakestill volum</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Tøm Nylige Filer</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Fortsett</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Paus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Advarsel: Utdatert Spillformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Feil under innlasting av ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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>Vennligst følg <a href='https://yuzu-emu.org/help/quickstart/'>hurtigstartsguiden</a> for Ã¥ redumpe filene dine. <br>Du kan henvise til yuzu wikien</a> eller yuzu Discorden</a> for hjelp.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Lukker programvare...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Lagre Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Feil Under Ã…pning av %1 Mappen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Mappen eksisterer ikke!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>Feil ved Ã¥pning av overførbar shaderbuffer</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Kunne ikke opprette shader cache-katalogen for denne tittelen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Feil ved fjerning av innhold</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Feil ved fjerning av oppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Feil ved fjerning av DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Fjern Innstallert Spillinnhold?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Fjern Installert Spilloppdatering?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Fjern Installert Spill DLC?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Fjern oppføring</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Fjerning lykkes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>Vellykket fjerning av det installerte basisspillet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>Fjernet vellykket den installerte oppdateringen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>Fjernet vellykket %1 installerte DLC-er.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Slette OpenGL Overførbar Shaderbuffer?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Slette Vulkan Overførbar Shaderbuffer?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Slette Alle Overførbare Shaderbuffere?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Fjern Tilpasset Spillkonfigurasjon?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Fjerne Hurtiglagringen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Fjern Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>En shaderbuffer for denne tittelen eksisterer ikke.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Feil ved fjerning av Vulkan Driver-Rørledningsbuffer</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Kunne ikke fjerne driverens rørledningsbuffer.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>Feil ved fjerning av overførbare shaderbuffere</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>Vellykket fjerning av overførbare shaderbuffere.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Feil ved fjerning av overførbar shaderbuffer katalog.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Feil Under Fjerning Av Tilpasset Konfigurasjon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>Fjernet vellykket den tilpassede spillkonfigurasjonen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Utvinning av RomFS Feilet!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Fullstendig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Skjelett</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Velg RomFS Dump Modus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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>Det er ikke nok ledig plass pÃ¥ %1 til Ã¥ pakke ut RomFS. Vennligst frigjør plass eller velg en annen dump-katalog under Emulering > Konfigurer > System > Filsystem > Dump Root.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Utvinner RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Avbryt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS Utpakking lyktes!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Operasjonen fullført vellykket.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>Integritetsverifisering kunne ikke utføres!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>Filinnholdet ble ikke kontrollert for gyldighet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Integritetsverifisering mislyktes!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>Filinnholdet kan være skadet.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Verifiserer integritet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Integritetsverifisering vellykket!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Integritetsverifisering mislyktes!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Filinnholdet kan være skadet.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Lag Snarvei</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>Opprettet en snarvei til %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Dette vil opprette en snarvei til gjeldende AppImage. Dette fungerer kanskje ikke bra hvis du oppdaterer. Fortsette?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Lag Ikon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Kan ikke opprette ikonfil. Stien "%1" finnes ikke og kan ikke opprettes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Feil ved Ã¥pning av %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Velg Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Egenskaper</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Last inn Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Ã…pne Utpakket ROM Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Ugyldig Mappe Valgt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Installer Filer</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Installerer fil "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Insallasjonsresultater</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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>For Ã¥ unngÃ¥ mulige konflikter frarÃ¥der vi brukere Ã¥ installere basisspill pÃ¥ NAND. Bruk kun denne funksjonen til Ã¥ installere oppdateringer og DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n fil ble nylig installert @@ -5426,7 +5440,7 @@ Bruk kun denne funksjonen til Ã¥ installere oppdateringer og DLC.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n fil ble overskrevet @@ -5434,7 +5448,7 @@ Bruk kun denne funksjonen til Ã¥ installere oppdateringer og DLC.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n fil ble ikke installert @@ -5442,194 +5456,194 @@ Bruk kun denne funksjonen til Ã¥ installere oppdateringer og DLC.</translation> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Systemapplikasjon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Systemarkiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Systemapplikasjonsoppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Firmware Pakke (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Firmware-Pakke (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Spill</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Spilloppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Spill tilleggspakke</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta Tittel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Velg NCA Installasjonstype...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Feil under Installasjon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Fil ikke funnet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Filen "%1" ikke funnet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Krav til maskinvare ikke oppfylt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Systemet ditt oppfyller ikke de anbefalte maskinvarekravene. Kompatibilitetsrapportering er deaktivert.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Mangler yuzu Bruker</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Feil under Ã¥pning av URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Kunne ikke Ã¥pne URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS-innspilling</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Overskriv filen til spiller 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Ugyldig konfigurasjon oppdaget</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <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="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Feil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo-Fil (%1);; Alle Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Last inn Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Feil ved lasting av Amiibo data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Den valgte filen er ikke en gyldig amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Den valgte filen er allerede i bruk</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>En ukjent feil oppso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5638,291 +5652,225 @@ Bruk kun denne funksjonen til Ã¥ installere oppdateringer og DLC.</translation> %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet for kontroller</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Ta Skjermbilde</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG Bilde (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS-tilstand: Kjører %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS-tilstand: Spiller inn %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS-tilstand: Venter %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS-tilstand: Ugyldig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Stopp kjøring</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Stopp innspilling (&E)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>Spill inn (%E)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Hastighet: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Hastighet: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Spill: %1 FPS (ubegrenset)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Spill: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Ramme: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>INGEN AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUM: DEMPET</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUM: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Bekreft Nøkkel-Redirevasjon</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Du er i ferd med Ã¥ tvinge rederivasjon av alle dine nøkler. -Hvis du ikke vet hva dette betyr eller hva du gjør, -er dette en potensielt destruktiv handling. -Vennligst forsikre at dette er det du vil -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="4762"/> - <source>Missing fuses</source> - <translation>Mangler fuses</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- Mangler BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- Mangler BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- Mangler PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Derivasjonskomponenter Mangler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Deriverer nøkler... -Dette kan ta opp til et minutt avhengig -av systemytelsen din.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Deriverer Nøkler</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Dekryptering av systemarkiv mislyktes</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Krypteringsnøkler klarte ikke Ã¥ dekryptere firmware. <br>Vennligst følg <a href='https://yuzu-emu.org/help/quickstart/'>quickstartguiden for yuzu </a> for Ã¥ fÃ¥ alle nøkler, firmware og spill.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Velg RomFS Dump-MÃ¥l</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6200,62 +6148,62 @@ Vil du overstyre dette og lukke likevel?</translation> <translation>Egenskaper</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Skann Undermapper</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Fjern Spillmappe</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Flytt Opp</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Flytt Ned</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Ã…pne Spillmappe</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Fjern</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Navn</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatibilitet</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Tilleggsprogrammer</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Fil Type</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Størrelse</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6326,7 +6274,7 @@ Vil du overstyre dette og lukke likevel?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Dobbeltrykk for Ã¥ legge til en ny mappe i spillisten</translation> </message> @@ -6339,12 +6287,12 @@ Vil du overstyre dette og lukke likevel?</translation> <translation><numerusform>%1 of %n resultat</numerusform><numerusform>%1 of %n resultater</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filter:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Angi mønster for Ã¥ filtrere</translation> </message> @@ -6856,176 +6804,171 @@ Feilmelding:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Reinitialiser nøkler...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>Om yuzu (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Énvindusmodus (&W)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Kon&figurer...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Vis Overskrifter for Dock Widget (&O)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Vis &filterlinje</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Vis &statuslinje</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Vis statuslinje</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>Bla gjennom den offentlige spillobbyen (&B)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>Opprett Rom (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>Forlat Rommet (&L)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>Direkte Tilkobling Til Rommet (&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>Vis nÃ¥værende rom (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>F&ullskjerm</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>Omstart (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Last/Fjern Amiibo (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>Rapporter kompatibilitet (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Ã…pne Modifikasjonssiden (&M)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Ã…pne Hurtigstartsguiden (&Q)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Ã…pne &yuzu Mappen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>Ta Skjermbilde (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>Konfigurer TAS (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Konfigurer Gjeldende Spill (&U)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>Tilbakestill (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>Spill inn (%E)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/nl.ts b/dist/languages/nl.ts index f576b2abd..071179f2c 100644 --- a/dist/languages/nl.ts +++ b/dist/languages/nl.ts @@ -682,759 +682,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Aangepaste RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Opmerking: dit kan worden overschreven wanneer de regio-instelling automatisch wordt geselecteerd</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Regio:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Tijdzone:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Geluidsuitvoermodus:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Vraag aan gebruiker bij opstarten van het spel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Emulatie onderbreken op de achtergrond</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Verberg muis wanneer inactief</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Lage Kwaliteit)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Gemiddelde kwaliteit)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly Shaders, alleen NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Experimenteel, alleen Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normaal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Hoog</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Extreme</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Accuraat </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Onveilig</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (schakelt de meeste optimalisaties uit)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Randloos Venster</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Exclusief Volledig Scherm</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Geen Video-uitvoer</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU Videodecodering</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU Videodecodering (Standaard)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EXPERIMENTEEL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [EXPERIMENTEEL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest Neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussian</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Geen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Standaart (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Forceer 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Forceer 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Forceer 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Uitrekken naar Venster</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automatisch</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Standaard</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japans (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Amerikaans-Engels</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Frans (Français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Duits (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italiaans (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spaans (Español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Chinees</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Koreaans (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Nederlands (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugees (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russisch (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanese</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Brits-Engels</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Canadees-Frans</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Latijns-Amerikaans Spaans</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Vereenvoudigd Chinees</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Traditioneel Chinees (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Braziliaans-Portugees (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australië</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>China</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Auto (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Standaard (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egypte</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Ijsland</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libië</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turkije</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universeel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Docked</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Handheld</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2302,33 +2302,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Achtergrondkleur:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Uit</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync Uit</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Aanbevolen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Aan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync Aan</translation> </message> @@ -3394,6 +3394,15 @@ Om de assen om te keren, beweeg je de joystick eerst verticaal en vervolgens hor </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3729,42 +3738,47 @@ De huidige waarden zijn %1% en %2%.</translation> <translation>Sommige instellingen zijn alleen beschikbaar als een spel niet actief is.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Add-Ons</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Systeem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Graphics</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Adv. Graphics</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Invoerprofielen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Eigenschappen</translation> </message> @@ -3868,67 +3882,67 @@ De huidige waarden zijn %1% en %2%.</translation> <translation>Voer een gebruikersnaam in voor de nieuwe gebruiker:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Voer nieuwe gebruikersnaam in:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Selecteer Gebruikersfoto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG-foto's (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Fout tijdens verwijderen afbeelding</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Er is een fout opgetreden bij het overschrijven van de vorige afbeelding in: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Fout tijdens verwijderen bestand</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Kan bestaand bestand niet verwijderen: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Fout tijdens het maken van de map met afbeeldingen van de gebruiker</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Fout tijdens het maken van map %1 om gebruikersafbeeldingen in te bewaren.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Fout tijdens het kopiëren van de gebruiker afbeelding</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Kan afbeelding niet kopiëren van %1 naar %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Fout bij het aanpassen van grootte van gebruikersafbeelding</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Kon de grootte van de afbeelding niet wijzigen</translation> </message> @@ -3936,17 +3950,17 @@ De huidige waarden zijn %1% en %2%.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Deze gebruiker verwijderen? Alle opgeslagen gegevens van de gebruiker worden verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Bevestig Verwijdering</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Naam: %1 @@ -4100,7 +4114,7 @@ UUID: %2</translation> <translation>Core</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Waarschuwing: "%1" is geen geldige taal voor regio "%2"</translation> </message> @@ -4812,601 +4826,601 @@ Versleep punten om de positie te veranderen, of dubbelklik op tabelcellen om waa <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetrie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Beschadigde Vulkan-installatie gedetecteerd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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-initialisatie mislukt tijdens het opstarten.<br><br>Klik <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>hier voor instructies om het probleem op te lossen</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Een spel uitvoeren</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Web Applet Laden...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Schakel Webapplet uit</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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>Het uitschakelen van de webapplet kan leiden tot ongedefinieerd gedrag en mag alleen gebruikt worden met Super Mario 3D All-Stars. Weet je zeker dat je de webapplet wilt uitschakelen? (Deze kan opnieuw worden ingeschakeld in de Debug-instellingen).</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>Het aantal shaders dat momenteel wordt gebouwd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>De huidige geselecteerde resolutieschaalmultiplier.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Huidige emulatiesnelheid. Waarden hoger of lager dan 100% geven aan dat de emulatie sneller of langzamer werkt dan een Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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 beelden per seconde het spel momenteel weergeeft. Dit varieert van spel tot spel en van scène tot scène.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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 die nodig is om een Switch-beeld te emuleren, beeldbeperking of v-sync niet meegerekend. Voor emulatie op volle snelheid mag dit maximaal 16,67 ms zijn.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Dempen opheffen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Dempen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Herstel Volume</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Wis Recente Bestanden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Doorgaan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Onderbreken</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Waarschuwing Verouderd Spelformaat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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 het gedeconstrueerde ROM-mapformaat voor dit spel, wat een verouderd formaat is dat vervangen is door andere zoals NCA, NAX, XCI, of NSP. Deconstructed ROM-mappen missen iconen, metadata, en update-ondersteuning.<br><br>Voor een uitleg van de verschillende Switch-formaten die yuzu ondersteunt,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'> bekijk onze wiki</a>. Dit bericht wordt niet meer getoond.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Fout tijdens het laden van een ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>Het ROM-formaat wordt niet ondersteund.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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 is een fout tegengekomen tijdens het uitvoeren van de videokern. Dit wordt meestal veroorzaakt door verouderde GPU-drivers, inclusief geïntegreerde. Zie het logboek voor meer details. Voor meer informatie over toegang tot het log, zie de volgende pagina: <a href='https://yuzu-emu.org/help/reference/log-files/'>Hoe upload je het logbestand</a>. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Fout tijdens het laden van ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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>Volg de <a href='https://yuzu-emu.org/help/quickstart/'>yuzu snelstartgids</a> om je bestanden te redumpen.<br>Je kunt de yuzu-wiki</a>of de yuzu-Discord</a> raadplegen voor hulp.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Software sluiten...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Save Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Fout tijdens het openen van %1 map</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Map bestaat niet!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Kon de shader-cache-map voor dit spel niet aanmaken.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Fout bij het verwijderen van de inhoud</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Fout bij het verwijderen van de update</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Fout bij het verwijderen van DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Geïnstalleerde Spelinhoud Verwijderen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Geïnstalleerde Spel-update Verwijderen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Geïnstalleerde Spel-DLC Verwijderen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Verwijder Invoer</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Met Succes Verwijderd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>Het geïnstalleerde basisspel is succesvol verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Het basisspel is niet geïnstalleerd in de NAND en kan niet worden verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>De geïnstalleerde update is succesvol verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>Er is geen update geïnstalleerd voor dit spel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>Er is geen DLC geïnstalleerd voor dit spel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 geïnstalleerde DLC met succes verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Overdraagbare OpenGL-shader-cache Verwijderen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Overdraagbare Vulkan-shader-cache Verwijderen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Alle Overdraagbare Shader-caches Verwijderen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Aangepaste Spelconfiguratie Verwijderen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Verwijder Cache-opslag?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Verwijder Bestand</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>Fout bij het verwijderen van Overdraagbare Shader-cache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>Er bestaat geen shader-cache voor dit spel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>De overdraagbare shader-cache is verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>Kon de overdraagbare shader-cache niet verwijderen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Fout bij het verwijderen van Pijplijn-cache van Vulkan-driver</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Kon de pijplijn-cache van de driver niet verwijderen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>Fout bij het verwijderen van overdraagbare shader-caches</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>De overdraagbare shader-caches zijn verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Kon de overdraagbare shader-cache-map niet verwijderen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Fout bij het verwijderen van aangepaste configuratie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>Er bestaat geen aangepaste configuratie voor dit spel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>De aangepaste spelconfiguratie is verwijderd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>Kon de aangepaste spelconfiguratie niet verwijderen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS-extractie Mislukt!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Er is een fout opgetreden bij het kopiëren van de RomFS-bestanden of de gebruiker heeft de bewerking geannuleerd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Volledig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Skelet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Selecteer RomFS-dumpmodus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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 hoe je de RomFS gedumpt wilt hebben.<br>Volledig zal alle bestanden naar de nieuwe map kopiëren, terwijl <br>Skelet alleen de mapstructuur zal aanmaken.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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>Er is niet genoeg vrije ruimte op %1 om de RomFS uit te pakken. Maak ruimte vrij of kies een andere dumpmap bij Emulatie > Configuratie > Systeem > Bestandssysteem > Dump Root.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>RomFS uitpakken...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Annuleren</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS-extractie Geslaagd!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>De bewerking is succesvol voltooid.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>Integriteitsverificatie kon niet worden uitgevoerd!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>De inhoud van bestanden werd niet gecontroleerd op geldigheid.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Integriteitsverificatie mislukt!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>Bestandsinhoud kan corrupt zijn.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Integriteit verifiëren...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Integriteitsverificatie geslaagd!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Integriteitsverificatie mislukt!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Bestandsinhoud kan corrupt zijn.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Maak Snelkoppeling</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>Succesvol een snelkoppeling naar %1 gemaakt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Dit maakt een snelkoppeling naar de huidige AppImage. Dit werkt mogelijk niet goed als je een update uitvoert. Doorgaan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Maak Icoon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Kan geen icoonbestand maken. Pad "%1" bestaat niet en kan niet worden aangemaakt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Fout bij openen %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Selecteer Map</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Eigenschappen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>De speleigenschappen kunnen niet geladen worden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Laad Bestand</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Open Uitgepakte ROM-map</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Ongeldige Map Geselecteerd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Installeerbaar Switch-bestand (*.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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Installeer Bestanden</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>%n bestand(en) resterend</numerusform><numerusform>%n bestand(en) resterend</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Bestand "%1" Installeren...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Installeerresultaten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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>Om mogelijke conflicten te voorkomen, raden we gebruikers af om basisgames te installeren op de NAND. Gebruik deze functie alleen om updates en DLC te installeren.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n bestand(en) zijn recent geïnstalleerd @@ -5414,7 +5428,7 @@ Gebruik deze functie alleen om updates en DLC te installeren.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n bestand(en) werden overschreven @@ -5422,7 +5436,7 @@ Gebruik deze functie alleen om updates en DLC te installeren.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n bestand(en) niet geïnstalleerd @@ -5430,194 +5444,194 @@ Gebruik deze functie alleen om updates en DLC te installeren.</translation> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Systeemapplicatie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Systeemarchief</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Systeemapplicatie-update</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Filmware-pakket (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Filmware-pakket (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Spel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Spelupdate</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Spel-DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Selecteer NCA-installatiesoort...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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 waarin je deze NCA wilt installeren: (In de meeste gevallen is de standaard "Spel" prima).</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Installatie Mislukt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Het soort title dat je hebt geselecteerd voor de NCA is ongeldig.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Bestand niet gevonden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Bestand "%1" niet gevonden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Er is niet voldaan aan de hardwarevereisten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Je systeem voldoet niet aan de aanbevolen hardwarevereisten. Compatibiliteitsrapportage is uitgeschakeld.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>yuzu-account Ontbreekt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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 een spelcompatibiliteitstest in te dienen, 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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Fout bij het openen van URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Kan de URL "%1" niet openen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS-opname</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Het bestand van speler 1 overschrijven?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Ongeldige configuratie gedetecteerd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Handheld-controller kan niet gebruikt worden in docked-modus. Pro controller wordt geselecteerd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>De huidige amiibo is verwijderd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Fout</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>Het huidige spel is niet op zoek naar amiibo's</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo-bestand (%1);; Alle Bestanden (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Laad Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Fout tijdens het laden van de Amiibo-gegevens</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Het geselecteerde bestand is geen geldige amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Het geselecteerde bestand is al in gebruik</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Er is een onbekende fout opgetreden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5626,291 +5640,225 @@ Gebruik deze functie alleen om updates en DLC te installeren.</translation> %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Controller Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Leg Schermafbeelding Vast</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG-afbeelding (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS-status: %1/%2 In werking</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS-status: %1 Aan het opnemen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS-status: %1/%2 Inactief</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS-status: Ongeldig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Stop Uitvoering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Stop Opname</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>Opnemen</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>Bouwen: %n shader(s)</numerusform><numerusform>Bouwen: %n shader(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Schaal: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Snelheid: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Snelheid: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Spel: %1 FPS (Ontgrendeld)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Game: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>GEEN AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUME: GEDEMPT</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Bevestig Sleutelherhaling</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Je staat op het punt om al je sleutels te forceren. -Als je niet weet wat dit betekent of wat je doet, -is dit een potentieel destructieve actie. -Zorg ervoor dat dit is wat je wilt -en maak eventueel back-ups. - -Dit zal je automatisch gegenereerde sleutelbestanden verwijderen en de sleutelafleidingsmodule opnieuw uitvoeren.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>Missing fuses</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - BOOT0 Ontbreekt</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - BCPKG2-1-Normal-Main Ontbreekt</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - PRODINFO Ontbreekt</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Afleidingscomponenten ontbreken</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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>Encryptiesleutels ontbreken. <br>Volg <a href='https://yuzu-emu.org/help/quickstart/'>de yuzu-snelstartgids</a> om al je sleutels, firmware en spellen te krijgen.<br><br><small>(%1)</small></translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Sleutels afleiden... -Dit kan tot een minuut duren, -afhankelijk van de prestaties van je systeem.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Sleutels Afleiden</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Decryptie van Systeemarchief Mislukt</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Encryptiesleutels zijn mislukt om firmware te decoderen. <br>Volg <a href='https://yuzu-emu.org/help/quickstart/'>de yuzu-snelstartgids</a> om al je sleutels, firmware en games te krijgen.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Selecteer RomFS-dumpdoel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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 niet opgeslagen voortgang zal verloren gaan.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6188,62 +6136,62 @@ Wil je toch afsluiten?</translation> <translation>Eigenschappen</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Scan Submappen</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Verwijder Spelmap</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Omhoog</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Omlaag</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Open Maplocatie</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Verwijder</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Naam</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Compatibiliteit</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Add-ons</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Bestandssoort</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Grootte</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6314,7 +6262,7 @@ Wil je toch afsluiten?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Dubbel-klik om een ​​nieuwe map toe te voegen aan de spellijst</translation> </message> @@ -6327,12 +6275,12 @@ Wil je toch afsluiten?</translation> <translation><numerusform>%1 van %n resultaat(en)</numerusform><numerusform>%1 van %n resultaat(en)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filter:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Voer patroon in om te filteren</translation> </message> @@ -6844,176 +6792,171 @@ Debug-bericht: </translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Herinitialiseer toetsen...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Over yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Modus Enkel Venster</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Con&figureer...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Toon Dock Widget Kopteksten</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Toon &Filterbalk</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Toon &Statusbalk</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Toon Statusbalk</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Bladeren door Openbare Spellobby</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Maak Kamer</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Verlaat Kamer</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Directe Verbinding met Kamer</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Toon Huidige Kamer</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>Volledig Scherm</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Herstart</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Laad/Verwijder &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Rapporteer Compatibiliteit</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Open &Mod-pagina</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Open &Snelstartgids</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Open &yuzu-map</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Leg Schermafbeelding Vast</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Configureer TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Configureer Huidig Spel...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Herstel</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>Opnemen</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/pl.ts b/dist/languages/pl.ts index baf046a12..4dcab21a6 100644 --- a/dist/languages/pl.ts +++ b/dist/languages/pl.ts @@ -679,759 +679,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Niestandardowy RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Uwaga: można to zmienić, gdy ustawienie regionu jest wybierane automatycznie</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Region:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Strefa czasowa:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Tryb wyjÅ›cia dźwiÄ™ku:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Pytaj o użytkownika podczas uruchamiania gry</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Wstrzymaj emulacjÄ™ w tle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Ukryj mysz przy braku aktywnoÅ›ci</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Brak (najlepsza jakość)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (niska jakość)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Å›rednia jakość)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Zgromadzone Shadery, tylko NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Eksperymentalne, Tylko Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normalny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Wysoki</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Automatyczny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>DokÅ‚adny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Niebezpieczny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoiczne (wyłącza wiÄ™kszość optymalizacji)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>W oknie (Bezramkowy)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Exclusive Fullscreen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Brak wyjÅ›cia wideo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Dekodowanie Wideo przez CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Dekodowanie Wideo przez GPU (DomyÅ›lne)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EKSPERYMENTALNE]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [Ekperymentalnie]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Najbliższy sÄ…siadujÄ…cy</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinearny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bikubiczny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Kulisty</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Å»adna (wyłączony)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>DomyÅ›lne (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>WymuÅ› 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>WymuÅ› 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>WymuÅ› 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>RozciÄ…gnij do Okna</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automatyczne</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>DomyÅ›lny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>JapoÅ„ski (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Angielski AmerykaÅ„ski</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Francuski (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Niemiecki (Niemcy)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>WÅ‚oski (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>HiszpaÅ„ski (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>ChiÅ„ski</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>KoreaÅ„ski (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>DuÅ„ski (Holandia)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugalski (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Rosyjski (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>TajwaÅ„ski</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Angielski Brytyjski</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Fancuski (Kanada)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>HiszpaÅ„ski (Latin American)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>ChiÅ„ski (Uproszczony)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>ChiÅ„ski tradycyjny (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Portugalski (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japonia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Chiny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Tajwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egipt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Irlandia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islandia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Izrael</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamajka</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polska</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugalia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turcja</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Uniwersalny</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Zadokowany</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>PrzenoÅ›nie</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2309,33 +2309,33 @@ Gdy ta opcja jest włączona, niedopasowanie jest uruchamiane tylko wtedy, gdy d <translation>Kolor tÅ‚a</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Wyłączone</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>VSync wyłączony</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Zalecane</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Włączone</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>VSync aktywny</translation> </message> @@ -3401,6 +3401,15 @@ Aby odwrócić osie, najpierw przesuÅ„ joystick pionowo, a nastÄ™pnie poziomo.</ </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3735,42 +3744,47 @@ Current values are %1% and %2% respectively.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Dodatki</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>System</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Zaaw. Grafika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>DźwiÄ™k</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Profil wejÅ›ciowy</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>WÅ‚aÅ›ciwoÅ›ci</translation> </message> @@ -3874,67 +3888,67 @@ Current values are %1% and %2% respectively.</source> <translation>Wprowadź nazwÄ™ dla nowego użytkownika:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Wpisz nowÄ… nazwÄ™ użytkownika:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Ustaw zdjÄ™cie użytkownika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Obrazki JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>BÅ‚ad usuniÄ™cia zdjÄ™cia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Błąd podczas próby nadpisania poprzedniego zdjÄ™cia dla: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Błąd usuniÄ™cia pliku</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Nie można usunąć istniejÄ…cego pliku: %1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Błąd podczas tworzenia folderu ze zdjÄ™ciem użytkownika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Nie można utworzyć Å›cieżki %1 do przechowywania zdjęć użytkownika.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Błąd kopiowania zdjÄ™cia użytkownika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Nie można skopiować zdjÄ™cia z %1 do %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Błąd podczas zmieniania rozmiaru obrazu użytkownika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Nie można zmienić rozmiaru obrazu</translation> </message> @@ -3942,17 +3956,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Czy usunąć tego użytkownika? Wszystkie dane zapisu użytkownika zostanÄ… usuniÄ™te.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Potwierdź usuniÄ™cie</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Nazwa: %1 @@ -4106,7 +4120,7 @@ UUID: %2</translation> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4818,602 +4832,602 @@ PrzeciÄ…gnij punkty, aby zmienić pozycjÄ™, lub kliknij dwukrotnie komórki tabe <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Wykryto uszkodzonÄ… instalacjÄ™ Vulkana</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Åadowanie apletu internetowego...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Wyłącz Aplet internetowy</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>Ilość budowanych shaderów</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <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="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&UsuÅ„ Ostatnie pliki</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Kontynuuj</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pauza</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>OSTRZEÅ»ENIE! Nieaktualny format gry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Błąd podczas wczytywania ROMu!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Zamykanie aplikacji...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Zapis danych</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Dane modów</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Błąd podczas otwarcia folderu %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Folder nie istnieje!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Błąd podczas usuwania zawartoÅ›ci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Błąd podczas usuwania aktualizacji</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Błąd podczas usuwania dodatków</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Czy usunąć zainstalowanÄ… zawartość gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Czy usunąć zainstalowanÄ… aktualizacjÄ™ gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Czy usunąć zainstalowane dodatki gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>UsuÅ„ wpis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>PomyÅ›lnie usuniÄ™to</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>PomyÅ›lnie usuniÄ™to zainstalowanÄ… Å‚atkÄ™.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Usunąć Transferowalne Shadery OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Usunąć Transferowalne Shadery Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Usunąć Wszystkie Transferowalne Shadery?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Usunąć niestandardowÄ… konfiguracjÄ™ gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Usunąć pamięć podrÄ™cznÄ…?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>UsuÅ„ plik</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <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="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <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="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Błąd podczas usuwania niestandardowej konfiguracji</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Wypakowanie RomFS nieudane!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>PeÅ‚ny</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Szkielet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Wybierz tryb zrzutu RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Wypakowywanie RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Anuluj</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Wypakowanie RomFS zakoÅ„czone pomyÅ›lnie!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Operacja zakoÅ„czona sukcesem.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Utwórz skrót</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <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="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Utwórz ikonÄ™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Błąd podczas otwierania %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Wybierz folder...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>WÅ‚aÅ›ciwoÅ›ci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>ZaÅ‚aduj plik...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Otwórz folder wypakowanego ROMu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Wybrano niewÅ‚aÅ›ciwy folder</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Zainstaluj pliki</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Instalowanie pliku "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Wynik instalacji</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>1 nowy plik zostaÅ‚ zainstalowany @@ -5423,497 +5437,431 @@ 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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Aplikacja systemowa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Archiwum systemu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Aktualizacja aplikacji systemowej</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Paczka systemowa (Typ A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Paczka systemowa (Typ B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Gra</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Aktualizacja gry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Dodatek do gry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>TytuÅ‚ Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Wybierz typ instalacji NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Instalacja nieudana</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Nie znaleziono pliku</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Nie znaleziono pliku "%1"</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Wymagania sprzÄ™towe nie sÄ… speÅ‚nione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Brakuje konta Yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Błąd otwierania adresu URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Nagrywanie TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Nadpisać plik gracza 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Wykryto nieprawidÅ‚owÄ… konfiguracjÄ™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Amiibo zostaÅ‚o "zdjÄ™te"</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Błąd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Plik Amiibo (%1);;Wszyskie pliki (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>ZaÅ‚aduj Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Błąd podczas Å‚adowania pliku danych Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>WystÄ…piÅ‚ nieznany błąd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Aplet kontrolera</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Zrób zrzut ekranu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Obrazek PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Status TAS: DziaÅ‚a %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Status TAS: Nagrywa %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Status TAS: Bezczynny %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Status TAS: Niepoprawny</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Wyłącz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>PrzestaÅ„ N&agrywać</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>N&agraj</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>PrÄ™dkość: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>PrÄ™dkość: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Gra: %1 FPS (Odblokowane)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Gra: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Klatka: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>BEZ AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>GÅ‚oÅ›ność: Wyciszony</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>GÅ‚oÅ›ność: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Potwierdź ponownÄ… aktywacje klucza</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Zamierzasz zmusić wszystkie swoje klucze do ponownej aktywacji. -JeÅ›li nie wiesz, co to oznacza i co robisz, -jest to potencjalnie destrukcyjne dziaÅ‚anie. -Upewnij siÄ™, że to jest to, czego chcesz -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="4762"/> - <source>Missing fuses</source> - <translation>BrakujÄ…ce bezpieczniki</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - Brak BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Brak BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Brak PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Brak komponentów wyprowadzania</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Wyprowadzanie kluczy... -Zależnie od tego może potrwać do minuty -na wydajność twojego systemu.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Wyprowadzanie kluczy...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Wybierz cel zrzutu RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6191,62 +6139,62 @@ Czy chcesz to ominąć i mimo to wyjść?</translation> <translation>WÅ‚aÅ›ciwoÅ›ci</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Skanuj podfoldery</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>UsuÅ„ katalog gier</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² PrzenieÅ› w górÄ™</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ PrzenieÅ› w dół</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Otwórz lokalizacje katalogu</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Wyczyść</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nazwa gry</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatybilność</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Dodatki</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Typ pliku</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Rozmiar</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6317,7 +6265,7 @@ Czy chcesz to ominąć i mimo to wyjść?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Kliknij podwójnie aby dodać folder do listy gier</translation> </message> @@ -6330,12 +6278,12 @@ Czy chcesz to ominąć i mimo to wyjść?</translation> <translation><numerusform>1 z %n rezultatów</numerusform><numerusform>%1 z %n rezultatów</numerusform><numerusform>%1 z %n rezultatów</numerusform><numerusform>%1 z %n rezultatów</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filter:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Wpisz typ do filtra</translation> </message> @@ -6847,176 +6795,171 @@ Komunikat debugowania:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Zainicjuj ponownie klucze...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&O yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Tryb &PojedyÅ„czego Okna</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Kon&figuruj...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Wyłącz Nagłówek Widżetu Docku</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Pokaż &Pasek Filtrów</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Pokaż &Pasek Statusu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Pokaż pasek statusu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&PrzeglÄ…daj publiczne lobby gier</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Utwórz Pokój</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Wyjdź z Pokoju</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&BezpoÅ›rednie połączenie z pokojem</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Pokaż bieżący pokój</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>P&eÅ‚ny Ekran</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Restart</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>ZaÅ‚aduj/UsuÅ„ &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Zraportuj Kompatybilność</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Otwórz &StronÄ™ z Modami</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Otwórz &Poradnik Szybkiego Startu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Otwórz &Folder yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Zrób ZdjÄ™cie</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Skonfiguruj TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Skonfiguruj O&becnÄ… GrÄ™...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Zresetuj</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>N&agraj</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/pt_BR.ts b/dist/languages/pt_BR.ts index bb7f7a1ed..33884825a 100644 --- a/dist/languages/pt_BR.ts +++ b/dist/languages/pt_BR.ts @@ -684,759 +684,759 @@ Pipelines de computação estão sempre habilitadas em todos os outros drivers.< </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Data e hora personalizada</translation> + <source>Custom RTC Date:</source> + <translation>Data personalizada do RTC:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Idioma:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Nota: isso pode ser substituÃdo caso a configuração de região automática esteja ativada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Região:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Fuso horário:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Modo de saÃda de som</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>Modo Console:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Escolher um usuário ao iniciar um jogo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Pausar emulação quando a janela ficar em segundo plano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Confirmar antes de parar a emulação</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Esconder cursor do mouse quando em inatividade</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Desabilitar miniaplicativo de controle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>Habilitar Gamemode</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU AssÃncrona</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Descompactado (Melhor qualidade)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Baixa qualidade)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Média qualidade)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulcano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Nenhum (desativado)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Shaders Assembly, apenas NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Experimental, Somente Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (Experimental, Somente para AMD/Mesa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Alto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Extremo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Automático</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Preciso</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Não seguro</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoia (desativa a maioria das otimizações)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>Dynarmic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Janela em tela cheia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Tela cheia exclusiva</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Sem saÃda de vÃdeo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Decodificação de vÃdeo pela CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Decodificação de vÃdeo pela GPU (Padrão)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Vizinho mais próximo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicúbico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussiano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Nenhum</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Padrão (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Forçar 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Forçar 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Forçar 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Esticar para a janela</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automático</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Padrão</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japônes (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Inglês Americano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Francês (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Alemão (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italiano (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Espanhol (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Chinês</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Coreano (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Holandês (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Português</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russo (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanês</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Inglês britânico (British English)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Francês canadense (Canadian French)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Espanhol latino-americano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Chinês simplificado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Chinês tradicional (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Português do Brasil (Brazilian Portuguese)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japão</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>EUA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Austrália</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>China</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Coréia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Auto (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Padrão (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egito</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islândia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Irã</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Ilhas Marshall</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>LÃbia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polônia </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapura</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turquia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Estéreo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (Padrão)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (Não seguro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (Não seguro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Na base</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Portátil</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Sempre perguntar (Padrão)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Somente se o jogo especificar para não parar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>Nunca perguntar</translation> </message> @@ -2316,33 +2316,33 @@ Pipelines de computação estão sempre habilitadas em todos os outros drivers.< <translation>Cor de fundo:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Desligado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Sincronização vertical desligada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Recomendado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Ligado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>Sincronização vertical ligada</translation> </message> @@ -3408,6 +3408,15 @@ Para inverter os eixos, mova seu analógico primeiro verticalmente e depois hori </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3743,42 +3752,47 @@ Os valores atuais são %1% e %2% respectivamente.</translation> <translation>Algumas configurações só estão disponÃveis apenas quando não houver nenhum jogo em execução.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Adicionais</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Sistema</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Gráficos</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Gráf. avançados</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Ãudio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Perfis de controle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Propriedades</translation> </message> @@ -3882,67 +3896,67 @@ Os valores atuais são %1% e %2% respectivamente.</translation> <translation>Digite o nome do novo usuário:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Digite um novo nome de usuário:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Selecione a imagem do usuário</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Imagens JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Erro ao excluir a imagem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Ocorreu um erro ao tentar substituir a imagem anterior em: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Erro ao excluir arquivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Não foi possÃvel excluir o arquivo existente: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Erro ao criar a pasta de imagens do usuário</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Não foi possÃvel criar a pasta %1 para armazenar as imagens do usuário.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Erro ao copiar a imagem do usuário</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Não foi possÃvel copiar a imagem de %1 para %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Erro no redimensionamento da imagem do usuário</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Não foi possÃvel redimensionar a imagem</translation> </message> @@ -3950,17 +3964,17 @@ Os valores atuais são %1% e %2% respectivamente.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Apagar esse usuário? Todos os dados salvos desse usuário serão removidos.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Confirmar exclusão</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Nome: %1 @@ -4114,7 +4128,7 @@ UUID: %2</translation> <translation>Core</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4826,601 +4840,601 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Detectada Instalação Defeituosa do Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Rodando um jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Carregando applet web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Desativar o applet da web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <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="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Unmute</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Mudo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Redefinir volume</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Limpar arquivos recentes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pausar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Aviso - formato de jogo desatualizado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Erro ao carregar a ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Encerrando software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Dados de jogos salvos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Dados de mods</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Erro ao abrir a pasta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>A pasta não existe!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Erro ao Remover Conteúdos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Erro ao Remover Atualização</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Erro ao Remover DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Remover Conteúdo Instalado do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Remover Atualização Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Remover DLC Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Remover item</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Removido com sucesso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <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="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <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="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <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="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <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="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Remover configurações customizadas do jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Remover Armazenamento da Cache?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Remover arquivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>Remover dados de tempo jogado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>Deseja mesmo resetar o tempo jogado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <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="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <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="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <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="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Falha ao extrair RomFS!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Extração completa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Apenas estrutura</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <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="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Extraindo RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Extração do RomFS concluida!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <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="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>A verificação de integridade não foi realizada.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>O conteúdo do arquivo não foi analisado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Houve uma falha na verificação de integridade!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>O conteúdo do arquivo pode estar corrompido.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Verificando integridade…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Verificação de integridade concluÃda!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Houve uma falha na verificação de integridade!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>O conteúdo do arquivo pode estar corrompido.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Criar Atalho</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>Gostaria de iniciar o jogo em tela cheia?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>Atalho criado em %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>Falha ao criar atalho em %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Criar Ãcone</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Erro ao abrir %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Selecionar pasta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Propriedades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Carregar arquivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Abrir pasta da ROM extraÃda</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Pasta inválida selecionada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Instalar arquivos</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Instalando arquivo "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Resultados da instalação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n arquivo(s) instalado(s) @@ -5429,7 +5443,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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n arquivo(s) sobrescrito(s) @@ -5438,7 +5452,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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n arquivo(s) não instalado(s) @@ -5447,194 +5461,194 @@ Por favor, use esse recurso apenas para instalar atualizações e DLCs.</transla </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Aplicativo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Arquivo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Atualização de aplicativo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Pacote de firmware (tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Pacote de firmware (tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Atualização de jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC de jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>TÃtulo delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <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="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Falha ao instalar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Arquivo não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Arquivo "%1" não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Requisitos de hardware não atendidos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Conta do yuzu faltando</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Erro ao abrir URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Gravando TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Sobrescrever arquivo do jogador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Configuração inválida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>O amiibo atual foi removido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Erro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Arquivo Amiibo (%1);; Todos os arquivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Carregar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Erro ao carregar dados do Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Ocorreu um erro desconhecido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5643,291 +5657,225 @@ Por favor, use esse recurso apenas para instalar atualizações e DLCs.</transla %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>Nenhum firmware disponÃvel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>Instale o firmware para usar o applet Ãlbum.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>Applet Ãlbum</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>O applet Ãlbum não está disponÃvel. Reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>Instale o firmware para usar o applet Armário.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Applet Armário</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>O applet Armário não está disponÃvel. Reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Instale o firmware para usar o applet Editor de Miis.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Applet Editor de Miis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>O applet Editor de Miis não está disponÃvel. Reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>Por favor instale o firmware para usar o Menu de Controles.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet de controle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>Menu de Controles não está disponÃvel. Por favor reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Capturar tela</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Imagem PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Situação TAS: Rodando %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Situação TAS: Gravando %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Situação TAS: Repouso %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Situação TAS: Inválido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Parar de rodar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Parar G&ravação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>G&ravação</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Velocidade: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Velocidade: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Jogo: %1 FPS (Desbloqueado)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Jogo: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Quadro: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>Sem AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUME: MUDO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Confirmar rederivação de chave</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Você está prestes a rederivar todas as suas chaves forçadamente. -Se você não sabe o que isso significa ou o que você está fazendo, -esta é uma ação potencialmente destrutiva. -Por favor, confirme que você quer mesmo fazer isto -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="4762"/> - <source>Missing fuses</source> - <translation>Faltando fusÃveis</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - Faltando BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Faltando BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Faltando PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Faltando componentes de derivação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Derivando chaves... -Isto pode demorar até um minuto, dependendo -do desempenho do seu sistema.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation>Faltando chaves de encriptação. <br>Por favor siga <a href='https://yuzu-emu.org/help/quickstart/'>o guia de inÃcio rápido do yuzu</a> para obter todas as suas chaves, firmware e jogos.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Derivando chaves</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Falha a desencriptar o arquivo do sistema</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Chaves de encriptação falharam a desencriptar o firmware. <br>Por favor segue <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> para obter todas as tuas chaves, firmware e jogos.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Selecionar alvo de extração do RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6205,62 +6153,62 @@ Deseja ignorar isso e sair mesmo assim?</translation> <translation>Propriedades</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Examinar subpastas</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Remover pasta de jogo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Mover para cima</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Mover para baixo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Abrir local da pasta</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Limpar</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nome</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Compatibilidade</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Adicionais</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Tipo de arquivo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Tamanho</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>Tempo jogado</translation> </message> @@ -6331,7 +6279,7 @@ Deseja ignorar isso e sair mesmo assim?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Clique duas vezes para adicionar uma pasta à lista de jogos</translation> </message> @@ -6344,12 +6292,12 @@ Deseja ignorar isso e sair mesmo assim?</translation> <translation><numerusform>%1 de %n resultado(s)</numerusform><numerusform>%1 de %n resultado(s)</numerusform><numerusform>%1 de %n resultado(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filtro:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Digite o padrão para filtrar</translation> </message> @@ -6861,176 +6809,171 @@ Mensagem de depuração:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Reinicializar chaves...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>&Verificar conteúdo instalado</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Sobre o yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Modo de &janela única</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Con&figurar...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Exibir barra de tÃtul&os de widgets afixados</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Exibir barra de &filtro</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Exibir barra de &status</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Exibir barra de status</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Navegar no Lobby de Salas Públicas</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Criar sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>Sai&r da sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>Entrar &diretamente numa sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>Mostrar &sala atual</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>&Tela cheia</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Reiniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Carregar/Remover &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Reportar compatibilidade</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Abrir página de &mods</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Abrir &guia de inÃcio rápido</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&Perguntas frequentes</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Abrir pasta do &yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Captura de tela</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>Abrir &Ãlbum</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&Definir apelido e proprietário</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>&Remover dados do jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&Recuperar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>&Formatar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>Abrir &Editor de Miis</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Configurar TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Configurar jogo &atual..</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Restaurar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>G&ravar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>Menu Abrir &Controles</translation> </message> diff --git a/dist/languages/pt_PT.ts b/dist/languages/pt_PT.ts index 71df4f2dd..18b31ec32 100644 --- a/dist/languages/pt_PT.ts +++ b/dist/languages/pt_PT.ts @@ -684,759 +684,759 @@ Pipelines de computação estão sempre habilitadas em todos os outros drivers.< </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC personalizado</translation> + <source>Custom RTC Date:</source> + <translation>Data personalizada do RTC:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>Idioma:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Nota: isto pode ser substituÃdo quando a configuração da região é de seleção automática</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Região:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Fuso Horário:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Modo de saÃda de som</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>Modo Console:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Solicitar para o utilizador na inicialização do jogo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Pausar o emulador quando estiver em segundo plano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>Confirmar antes de parar a emulação</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Esconder rato quando inactivo.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Desabilitar miniaplicativo de controle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>Habilitar Gamemode</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU AssÃncrona</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Descompactado (Melhor Q</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Baixa qualidade)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Média qualidade)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulcano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Nenhum (desativado)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Shaders Assembly, apenas NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Experimental, Somente Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (Experimental, Somente AMD/Mesa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Alto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Extremo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Automático</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Preciso</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Inseguro</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoia (desativa a maioria das otimizações)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>Dynarmic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Janela sem bordas</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Tela cheia exclusiva</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Sem saÃda de vÃdeo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Decodificação de vÃdeo pela CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Decodificação de vÃdeo pela GPU (Padrão)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [EXPERIMENTAL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Vizinho mais próximo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicúbico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussiano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Nenhum</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Padrão (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Forçar 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Forçar 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Forçar 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Esticar à Janela</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Automático</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Padrão</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japonês (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Inglês Americano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Francês (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Alemão (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italiano (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Espanhol (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Chinês</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Coreano (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Holandês (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Português (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Russo (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanês</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Inglês Britânico</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Francês Canadense</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Espanhol Latino-Americano</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Chinês Simplificado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Chinês Tradicional (æ£ é«” 䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Português do Brasil (Brazilian Portuguese)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japão</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>EUA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Austrália</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>China</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Coreia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Auto (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Padrão (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egipto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Irlanda</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Irlanda</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Islândia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Irão</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>LÃbia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polónia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapura</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turquia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Estéreo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (Padrão)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (Não seguro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (Não seguro)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Ancorado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Portátil</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>Sempre perguntar (Padrão)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>Somente se o jogo especificar para não parar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>Nunca perguntar</translation> </message> @@ -2308,33 +2308,33 @@ Pipelines de computação estão sempre habilitadas em todos os outros drivers.< <translation>Cor de fundo:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Desligado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Sincronização vertical desligada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Recomendado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Ligado</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>Sincronização vertical ligada</translation> </message> @@ -3400,6 +3400,15 @@ Para inverter os eixos, mova o seu analógico primeiro verticalmente e depois ho </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3735,42 +3744,47 @@ Os valores atuais são %1% e %2% respectivamente.</translation> <translation>Algumas configurações só estão disponÃveis apenas quando não houver nenhum jogo em execução.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Add-Ons</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Sistema</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Gráficos</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Gráficos Avç.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Perfis de controle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Propriedades</translation> </message> @@ -3874,67 +3888,67 @@ Os valores atuais são %1% e %2% respectivamente.</translation> <translation>Introduza um nome de utilizador para o novo utilizador:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Introduza um novo nome de utilizador:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Definir Imagem de utilizador</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Imagens JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Error ao eliminar a imagem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Ocorreu um erro ao tentar substituir imagem anterior em: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Erro ao eliminar o arquivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Não é possÃvel eliminar o arquivo existente: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Erro ao criar o diretório de imagens do utilizador</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Não é possÃvel criar o diretório %1 para armazenar imagens do utilizador.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Erro ao copiar a imagem do utilizador</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Não é possÃvel copiar a imagem de %1 para %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Erro no redimensionamento da imagem do usuário</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Não foi possÃvel redimensionar a imagem</translation> </message> @@ -3942,17 +3956,17 @@ Os valores atuais são %1% e %2% respectivamente.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Excluir esse usuário? Todos os dados salvos desse usuário serão removidos.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Confirmar para eliminar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Nome: %1 @@ -4106,7 +4120,7 @@ UUID: %2</translation> <translation>Core</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4818,806 +4832,806 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Detectada Instalação Defeituosa do Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Rodando um jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>A Carregar o Web Applet ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Desativar Web Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <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="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Unmute</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Mute</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Redefinir volume</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Limpar arquivos recentes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Pausa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Aviso de Formato de Jogo Desactualizado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Erro ao carregar o ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <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="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Encerrando software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Save Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Erro ao abrir a pasta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>A Pasta não existe!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Erro Removendo Conteúdos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Erro ao Remover Atualização</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Erro Removendo DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Remover Conteúdo Instalado do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Remover Atualização Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Remover DLC Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Remover Entrada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Removido com Sucesso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <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="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>Removido DLC instalado %1 com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <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="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <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="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <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="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Remover Configuração Personalizada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Remover Armazenamento da Cache?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Remover Ficheiro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>Remover dados de tempo jogado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>Deseja mesmo resetar o tempo jogado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <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="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <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="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Erro ao Remover Configuração Personalizada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>A Extração de RomFS falhou!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Cheio</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Esqueleto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Selecione o modo de despejo do RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Extraindo o RomFS ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Extração de RomFS Bem-Sucedida!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>A operação foi completa com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>A verificação de integridade não foi realizada.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>O conteúdo do arquivo não foi analisado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Houve uma falha na verificação de integridade!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>O conteúdo do arquivo pode estar corrompido.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Verificando integridade…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Verificação de integridade concluÃda!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Houve uma falha na verificação de integridade!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>O conteúdo do arquivo pode estar corrompido.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Criar Atalho</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>Gostaria de iniciar o jogo em tela cheia?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <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="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>Falha ao criar atalho para %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Criar Ãcone</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Erro ao abrir %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Selecione o Diretório</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Propriedades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <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="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Carregar Ficheiro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Abrir o directório ROM extraÃdo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Diretório inválido selecionado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Instalar Ficheiros</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>%n arquivo restante</numerusform><numerusform>%n ficheiro(s) remanescente(s)</numerusform><numerusform>%n ficheiro(s) remanescente(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Instalando arquivo "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Instalar Resultados</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Aplicação do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Arquivo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Atualização do aplicativo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Pacote de Firmware (Tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Pacote de Firmware (Tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Actualização do Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC do Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>TÃtulo Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <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="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Falha na instalação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Arquivo não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Arquivo "%1" não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Requisitos de hardware não atendidos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Conta Yuzu Ausente</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Erro ao abrir URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Gravando TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Sobrescrever arquivo do jogador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Configação inválida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>O amiibo atual foi removido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Erro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Arquivo Amiibo (%1);; Todos os Arquivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Carregar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Erro ao carregar dados do Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Ocorreu um erro desconhecido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5626,291 +5640,225 @@ Por favor, use esse recurso apenas para instalar atualizações e DLC.</translat %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>Nenhum firmware disponÃvel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>Instale o firmware para usar o applet Album.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>Applet Ãlbum</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>O applet Ãlbum não está disponÃvel. Reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>Instale o firmware para usar o applet Armário.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Applet Armário</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>O applet Armário não está disponÃvel. Reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>Instale o firmware para usar o applet Editor de Miis.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Applet Editor de Miis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>O applet Editor de Miis não está disponÃvel. Reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>Por favor instale o firmware para usar o Menu de Controles.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet de controle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>Menu de Controles não está disponÃvel. Por favor reinstale o firmware.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Captura de Tela</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Imagem PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Situação TAS: Rodando %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Situação TAS: Gravando %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Situação TAS: Repouso %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Situação TAS: Inválido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Parar de rodar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Começar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Parar G&ravação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>G&ravação</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Velocidade: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Velocidade: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Jogo: %1 FPS (Desbloqueado)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Jogo: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Quadro: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>Sem AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>VOLUME: MUDO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Confirme a rederivação da chave</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Você está prestes a forçar a rederivação de todas as suas chaves. -Se você não sabe o que isso significa ou o que você está fazendo, -esta é uma acção potencialmente destrutiva. -Por favor, certifique-se que isto é o que você quer -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="4762"/> - <source>Missing fuses</source> - <translation>FusÃveis em Falta</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- BOOT0 em Falta</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- BCPKG2-1-Normal-Main em Falta</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- PRODINFO em Falta</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Componentes de Derivação em Falta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Derivando chaves ... -Isto pode demorar até um minuto, dependendo -do desempenho do seu sistema.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation>Faltando chaves de encriptação. <br>Por favor siga <a href='https://yuzu-emu.org/help/quickstart/'>o guia de inÃcio rápido do yuzu</a> para obter todas as suas chaves, firmware e jogos.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Derivando Chaves</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Falha a desencriptar o arquivo do sistema</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Chaves de encriptação falharam a desencriptar o firmware. <br>Por favor segue <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> para obter todas as tuas chaves, firmware e jogos.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Selecione o destino de despejo do RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6188,62 +6136,62 @@ Deseja ignorar isso e sair mesmo assim?</translation> <translation>Propriedades</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Examinar Sub-pastas</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Remover diretório do Jogo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Mover para Cima</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Mover para Baixo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Abrir Localização do diretório</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Limpar</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Nome</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Compatibilidade</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Add-ons</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Tipo de Arquivo</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Tamanho</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>Tempo jogado</translation> </message> @@ -6314,7 +6262,7 @@ Deseja ignorar isso e sair mesmo assim?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Clique duas vezes para adicionar uma nova pasta à lista de jogos</translation> </message> @@ -6327,12 +6275,12 @@ Deseja ignorar isso e sair mesmo assim?</translation> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filtro:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Digite o padrão para filtrar</translation> </message> @@ -6844,176 +6792,171 @@ Mensagem de depuração:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Reinicializar chaves...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>&Verificar conteúdo instalado</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Sobre o yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Modo de &janela única</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Con&figurar...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Exibir barra de tÃtul&os de widgets afixados</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Mostrar Barra de &Filtros</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Mostrar Barra de &Estado</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Mostrar Barra de Estado</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Navegar no Lobby de Salas Públicas</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Criar Sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Sair da Sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>Conectar &Diretamente Numa Sala</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>Exibir &Sala Atual</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>T&ela cheia</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Reiniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Carregar/Remover &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Reportar compatibilidade</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Abrir Página de &Mods</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Abrir &guia de inÃcio rápido</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&Perguntas frequentes</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Abrir pasta &yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Captura de Tela</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>Abrir &Ãlbum</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>&Definir apelido e proprietário</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>&Remover dados do jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>&Recuperar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>&Formatar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>Abrir &Editor de Miis</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Configurar TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Configurar jogo atual...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Começar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Restaurar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>G&ravar</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>Menu Abrir &Controles</translation> </message> diff --git a/dist/languages/ru_RU.ts b/dist/languages/ru_RU.ts index f4cf02226..bc7e9ac20 100644 --- a/dist/languages/ru_RU.ts +++ b/dist/languages/ru_RU.ts @@ -390,7 +390,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="33"/> <source>Mute audio</source> - <translation type="unfinished"/> + <translation>Отключить звук</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="34"/> @@ -410,7 +410,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="41"/> <source>Memory Layout</source> - <translation type="unfinished"/> + <translation>Схема памÑти</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="43"/> @@ -425,7 +425,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="47"/> <source>Backend:</source> - <translation type="unfinished"/> + <translation>БÑкÑнд:</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="54"/> @@ -435,7 +435,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="55"/> <source>This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.</source> - <translation type="unfinished"/> + <translation>Ðтот вариант улучшает ÑкороÑть путем ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñти инÑтрукций ÑлиÑниÑ-умножениÑ-ÑÐ»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° процеÑÑорах без поддержки нативной FMA.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="58"/> @@ -445,7 +445,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="59"/> <source>This option improves the speed of some approximate floating-point functions by using less accurate native approximations.</source> - <translation type="unfinished"/> + <translation>Ðтот вариант улучшает ÑкороÑть некоторых приближенных функций Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой за Ñчет иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÐµÐµ точных вÑтроенных приближений.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="62"/> @@ -455,7 +455,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="63"/> <source>This option improves the speed of 32 bits ASIMD floating-point functions by running with incorrect rounding modes.</source> - <translation type="unfinished"/> + <translation>Ðтот вариант улучшает ÑкороÑть 32-битных функций Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой ASIMD путем Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ режимами округлениÑ.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="65"/> @@ -465,7 +465,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="66"/> <source>This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.</source> - <translation type="unfinished"/> + <translation>Ðтот вариант улучшает ÑкороÑть путем ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ NaN. Обратите внимание, что Ñто также Ñнижает точноÑть некоторых операций Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="68"/> @@ -475,7 +475,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="69"/> <source>This option improves speed by eliminating a safety check before every memory read/write in guest. Disabling it may allow a game to read/write the emulator's memory.</source> - <translation type="unfinished"/> + <translation>Ðтот вариант улучшает ÑкороÑть, уÑтранÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ безопаÑноÑти перед каждым чтением/запиÑью памÑти в гоÑтевой ÑиÑтеме. Отключение Ñтой опции может позволить игре читать/пиÑать памÑть ÑмулÑтора.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="73"/> @@ -485,7 +485,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="74"/> <source>This option improves speed by relying only on the semantics of cmpxchg to ensure safety of exclusive access instructions. Please note this may result in deadlocks and other race conditions.</source> - <translation type="unfinished"/> + <translation>Ðтот вариант улучшает ÑкороÑть, полагаÑÑÑŒ только на Ñемантику cmpxchg Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти инÑтрукций ÑкÑклюзивного доÑтупа. Обратите внимание, что Ñто может привеÑти к дедлокам и другим проблемам многопоточноÑти.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="79"/> @@ -550,12 +550,12 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="92"/> <source>ASTC Decoding Method:</source> - <translation type="unfinished"/> + <translation>Метод Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ASTC:</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="93"/> <source>ASTC Recompression Method:</source> - <translation type="unfinished"/> + <translation>Метод переÑÐ¶Ð°Ñ‚Ð¸Ñ ASTC:</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="95"/> @@ -631,14 +631,16 @@ Mailbox может иметь меньшую задержку, чем FIFO, и Ð <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="126"/> <source>Enable Compute Pipelines (Intel Vulkan Only)</source> - <translation type="unfinished"/> + <translation>Включить вычиÑлительные конвейеры (только Ð´Ð»Ñ Intel Vulkan)</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="127"/> <source>Enable compute pipelines, required by some games. This setting only exists for Intel proprietary drivers, and may crash if enabled. Compute pipelines are always enabled on all other drivers.</source> - <translation type="unfinished"/> + <translation>Включите вычиÑлительные конвейеры, необходимые Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… игр. +Ðта наÑтройка ÑущеÑтвует только Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¿Ñ€Ð¸ÐµÑ‚Ð°Ñ€Ð½Ñ‹Ñ… драйверов Intel и может вызвать вылеты, еÑли включена. +ВычиÑлительные конвейеры включены по умолчанию во вÑех оÑтальных драйверах.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="131"/> @@ -648,7 +650,7 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="132"/> <source>Uses reactive flushing instead of predictive flushing, allowing more accurate memory syncing.</source> - <translation type="unfinished"/> + <translation>ВмеÑто прогнозирующей очиÑтки иÑпользуетÑÑ Ñ€ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ð¾Ñ‡Ð¸Ñтка, что обеÑпечивает более точную Ñинхронизацию памÑти.</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="134"/> @@ -682,761 +684,761 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>ПользовательÑкий RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> - <translation type="unfinished"/> + <translation>Язык:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Примечание: может быть перезапиÑано еÑли регион выбираетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Регион:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>ЧаÑовой поÑÑ:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Режим вывода звука:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> - <translation type="unfinished"/> + <translation>КонÑольный режим:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Спрашивать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸ запуÑке игры</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>ПриоÑтанавливать ÑмулÑцию в фоновом режиме</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> - <translation type="unfinished"/> + <translation>Подтвердите перед оÑтановкой ÑмулÑции</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>СпрÑтать мышь при неактивноÑти</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Отключить веб-апплет</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> - <translation type="unfinished"/> + <translation>Включить режим игры</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>ЦП</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>графичеÑкий процеÑÑор</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> - <translation type="unfinished"/> + <translation>ÐÑинхронный ГП</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Без ÑÐ¶Ð°Ñ‚Ð¸Ñ (наилучшее качеÑтво)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (низкое качеÑтво)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Ñреднее качеÑтво)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (аÑÑемблерные шейдеры, только Ð´Ð»Ñ NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (ÐкÑпериментально, только Ð´Ð»Ñ Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (ÐкÑпериментальный, только Ð´Ð»Ñ AMD/Mesa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>ÐормальнаÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Ð’Ñ‹ÑокаÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>ÐкÑтрим</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Ðвто</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Точно</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>ÐебезопаÑно</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Параноик (отключает большинÑтво оптимизаций)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> - <translation type="unfinished"/> + <translation>Dynarmic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> - <translation type="unfinished"/> + <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Окно без границ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>ÐкÑклюзивный полноÑкранный</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>ОтÑутÑтвие видеовыхода</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Декодирование видео на ЦП</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Декодирование видео на ГП (по умолчанию)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> - <translation type="unfinished"/> + <translation>0.5X (360p/540p) [ÐКСПЕРИМЕÐТÐЛЬÐО]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [ÐКСПЕРИМЕÐТÐЛЬÐО]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [ÐКСПЕРИМЕÐТÐЛЬÐО]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Ближайший ÑоÑед</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Билинейный</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>БикубичеÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>ГауÑÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Ðикакой</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Стандартное (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>ЗаÑтавить 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>ЗаÑтавить 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>ЗаÑтавить 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>РаÑÑ‚Ñнуть до окна</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>ÐвтоматичеÑки</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>По умолчанию</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>ЯпонÑкий (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>ÐмериканÑкий английÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>ФранцузÑкий (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Ðемецкий (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>ИтальÑнÑкий (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>ИÑпанÑкий (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>КитайÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>КорейÑкий (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>ГолландÑкий (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>ПортугальÑкий (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>РуÑÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>ТайваньÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>БританÑкий английÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>КанадÑкий французÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>ЛатиноамериканÑкий иÑпанÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Упрощённый китайÑкий</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Традиционный китайÑкий (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>БразильÑкий португальÑкий (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>ЯпониÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>СШÐ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Европа</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>ÐвÑтралиÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Китай</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>КореÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Тайвань</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Ðвто (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>По умолчанию (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Куба</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Египт</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Ðйре</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Ðйре</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Гринвич</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Гонконг</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>ИÑландиÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Иран</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Израиль</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Ямайка</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Кваджалейн</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>ЛивиÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Ðавахо</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Польша</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>ПортугалиÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Сингапур</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>ТурциÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>УниверÑальный</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>ЗулуÑÑ‹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Моно</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Стерео</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Объёмный звук</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> - <translation type="unfinished"/> + <translation>4 ГБ ОЗУ (по умолчанию)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> - <translation type="unfinished"/> + <translation>6GB ОЗУ (ÐебезопаÑно)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> - <translation type="unfinished"/> + <translation>8GB ОЗУ (ÐебезопаÑно)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Ð’ док-Ñтанции</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Портативный</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> - <translation type="unfinished"/> + <translation>Ð’Ñегда Ñпрашивать (По умолчанию)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> - <translation type="unfinished"/> + <translation>Только еÑли игра указывает не оÑтанавливатьÑÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> - <translation type="unfinished"/> + <translation>Ðикогда не Ñпрашивать</translation> </message> </context> <context> @@ -1521,7 +1523,7 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="65"/> <source>CPU Backend</source> - <translation type="unfinished"/> + <translation>БÑкÑнд ЦП</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="95"/> @@ -1853,7 +1855,7 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="312"/> <source>Enable Renderdoc Hotkey</source> - <translation type="unfinished"/> + <translation>Включить горÑчую клавишу Renderdoc</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="322"/> @@ -1898,12 +1900,12 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="384"/> <source><html><head/><body><p>When checked, disables reordering of mapped memory uploads which allows to associate uploads with specific draws. May reduce performance in some cases.</p></body></html></source> - <translation type="unfinished"/> + <translation><html><head/><body><p>ЕÑли Ñтот флажок уÑтановлен, отключаетÑÑ Ð¿ÐµÑ€ÐµÑƒÐ¿Ð¾Ñ€Ñдочение загрузок в памÑть, что позволÑет ÑвÑзать загрузки Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ отриÑовками. Ð’ некоторых ÑлучаÑÑ… может Ñнизить производительноÑть.</p></body></html></translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="387"/> <source>Disable Buffer Reorder</source> - <translation type="unfinished"/> + <translation>Отключить переупорÑдочивание буфера</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="397"/> @@ -2268,7 +2270,7 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="52"/> <source>Linux</source> - <translation type="unfinished"/> + <translation>Linux</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="109"/> @@ -2314,33 +2316,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Фоновый цвет:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Отключена</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Верт. ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>РекомендуетÑÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Включена</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>Верт. ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°</translation> </message> @@ -2431,12 +2433,12 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="329"/> <source>Invalid hotkey settings</source> - <translation type="unfinished"/> + <translation>Ðеверные наÑтройки горÑчих клавиш</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="330"/> <source>An error occurred. Please report this issue on github.</source> - <translation type="unfinished"/> + <translation>Произошла ошибка. ПожалуйÑта, Ñообщите об Ñтой проблеме на github.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="370"/> @@ -3406,6 +3408,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3741,42 +3752,47 @@ Current values are %1% and %2% respectively.</source> <translation>Ðекоторые наÑтройки доÑтупны только тогда, когда игра не запущена.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>ДополнениÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>СиÑтема</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>ЦП</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Графика</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>РаÑш. Графика</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Звук</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Профили управлениÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>СвойÑтва</translation> </message> @@ -3880,67 +3896,67 @@ Current values are %1% and %2% respectively.</source> <translation>Введите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ профилÑ:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Введите новое Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Выберите изображение пользователÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ JPEG (*.jpg, *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Ошибка при удалении изображениÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Ошибка при попытке перезапиÑи предыдущего Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Ошибка при удалении файла</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Ðе удалоÑÑŒ удалить ÑущеÑтвующий файл: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Ошибка при Ñоздании папки пользовательÑких изображений</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Ðе получилоÑÑŒ Ñоздать папку %1 Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ пользователÑ.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Ошибка при копировании Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Ðе получилоÑÑŒ Ñкопировать изображение из %1 в %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Ошибка при изменении размера Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Ðевозможно изменить размер изображениÑ</translation> </message> @@ -3948,17 +3964,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Удалить Ñтого пользователÑ? Ð’Ñе Ñохраненные данные Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÑƒÑ‚ удалены.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Подтвердите удаление</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>ИмÑ: %1 @@ -4112,7 +4128,7 @@ UUID: %2</translation> <translation>Ядро</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4443,7 +4459,7 @@ Drag points to change position, or double-click table cells to edit values.</sou <message> <location filename="../../src/yuzu/configuration/configure_ui.ui" line="110"/> <source>Show Play Time Column</source> - <translation type="unfinished"/> + <translation>Показать Ñтолбец времени воÑпроизведениÑ</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_ui.ui" line="119"/> @@ -4488,7 +4504,7 @@ Drag points to change position, or double-click table cells to edit values.</sou <message> <location filename="../../src/yuzu/configuration/configure_ui.ui" line="221"/> <source>TextLabel</source> - <translation type="unfinished"/> + <translation>TextLabel</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_ui.ui" line="240"/> @@ -4509,7 +4525,7 @@ Drag points to change position, or double-click table cells to edit values.</sou <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="399"/> <source>Auto (%1 x %2, %3 x %4)</source> <comment>Screenshot width value</comment> - <translation type="unfinished"/> + <translation>Ðвто (%1 x %2, %3 x %4)</translation> </message> </context> <context> @@ -4824,601 +4840,601 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>ТелеметриÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Обнаружена Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð½Ð°Ñ ÑƒÑтановка Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Запущена игра</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Загрузка веб-апплета...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Отключить веб-апплет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>КоличеÑтво Ñоздаваемых шейдеров на данный момент</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Текущий выбранный множитель маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Включить звук</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Выключить звук</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>СброÑить громкоÑть</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>[&C] ОчиÑтить недавние файлы</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>[&C] Продолжить</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>[&P] Пауза</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Предупреждение уÑтаревший формат игры</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Ошибка при загрузке ROM'а!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>Формат ROM'а не поддерживаетÑÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>Произошла ошибка при инициализации видеоÑдра.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ПожалуйÑта, проверьте журнал Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-Ñ… битный)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-Ñ… битный)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Закрываем программу...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>СохранениÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Данные модов</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Ошибка при открытии папки %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Папка не ÑущеÑтвует!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>Ошибка при открытии переноÑного кÑша шейдеров</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Ðе удалоÑÑŒ Ñоздать папку кÑша шейдеров Ð´Ð»Ñ Ñтой игры.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Ошибка при удалении Ñодержимого</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Ошибка при удалении обновлений</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Ошибка при удалении DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Удалить уÑтановленное Ñодержимое игр?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Удалить уÑтановленные Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð³Ñ€Ñ‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Удалить уÑтановленные DLC игры?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Удалить запиÑÑŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>УÑпешно удалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð¸Ð³Ñ€Ð° уÑпешно удалена.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>УÑтановленное обновление уÑпешно удалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>Ð”Ð»Ñ Ñтой игры не было уÑтановлено обновление.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>Ð”Ð»Ñ Ñтой игры не были уÑтановлены DLC.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>УÑтановленное DLC %1 было уÑпешно удалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Удалить переноÑной кÑш шейдеров OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Удалить переноÑной кÑш шейдеров Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Удалить веÑÑŒ переноÑной кÑш шейдеров?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Удалить пользовательÑкую наÑтройку игры?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Удалить кÑш-хранилище?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Удалить файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> - <translation type="unfinished"/> + <translation>Удалить данные о времени игры</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> - <translation type="unfinished"/> + <translation>СброÑить Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð³Ñ€Ñ‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>Ошибка при удалении переноÑного кÑша шейдеров</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>КÑш шейдеров Ð´Ð»Ñ Ñтой игры не ÑущеÑтвует.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>ПереноÑной кÑш шейдеров уÑпешно удалён.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>Ðе удалоÑÑŒ удалить переноÑной кÑш шейдеров.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Ошибка при удалении конвейерного кÑша Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Ðе удалоÑÑŒ удалить конвейерный кÑш шейдеров.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>Ошибка при удалении переноÑного кÑша шейдеров</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>ПереноÑной кÑш шейдеров уÑпешно удален.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Ошибка при удалении папки переноÑного кÑша шейдеров.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Ошибка при удалении пользовательÑкой наÑтройки</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>ПользовательÑÐºÐ°Ñ Ð½Ð°Ñтройка Ð´Ð»Ñ Ñтой игры не ÑущеÑтвует.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>ПользовательÑÐºÐ°Ñ Ð½Ð°Ñтройка игры уÑпешно удалена.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>Ðе удалоÑÑŒ удалить пользовательÑкую наÑтройку игры.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Ðе удалоÑÑŒ извлечь RomFS!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Полный</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Скелет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Выберите режим дампа RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Извлечение RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Отмена</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Извлечение RomFS прошло уÑпешно!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð°.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> - <translation type="unfinished"/> + <translation>Проверка целоÑтноÑти не может быть выполнена!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> - <translation type="unfinished"/> + <translation>Файл не проверÑлÑÑ Ð½Ð° корректноÑть.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> + <translation>Проверка целоÑтноÑти...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> + <translation>Проверка целоÑтноÑти прошла уÑпешно!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Проверка целоÑтноÑти не удалаÑÑŒ!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> - <translation type="unfinished"/> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Файл может быть поврежден.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Создать Ñрлык</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> - <translation type="unfinished"/> + <translation>Ð’Ñ‹ хотите запуÑтить игру в полноÑкранном режиме?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>УÑпешно Ñоздан Ñрлык в %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> - <translation type="unfinished"/> + <translation>Ðе удалоÑÑŒ Ñоздать Ñрлык Ð´Ð»Ñ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Создать иконку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Выбрать папку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>СвойÑтва</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>Ðе удалоÑÑŒ загрузить ÑвойÑтва игры.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Загрузить файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Открыть папку извлечённого ROM'а</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Выбрана недопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>УÑтановить файлы</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>УÑтановка файла "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Результаты уÑтановки</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n файл был недавно уÑтановлен @@ -5428,7 +5444,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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n файл был перезапиÑан @@ -5438,7 +5454,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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n файл не удалоÑÑŒ уÑтановить @@ -5448,485 +5464,421 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>СиÑтемное приложение</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>СиÑтемный архив</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Обновление ÑиÑтемного приложениÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Пакет прошивки (Тип Ð)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Пакет прошивки (Тип Б)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Игра</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Обновление игры</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC игры</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Дельта-титул</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Выберите тип уÑтановки NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Ошибка уÑтановки</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Тип приложениÑ, который вы выбрали Ð´Ð»Ñ NCA, недейÑтвителен.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Файл не найден</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Файл "%1" не найден</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>ОК</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Ðе удовлетворены ÑиÑтемные требованиÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>ОтÑутÑтвует аккаунт yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Ошибка при открытии URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Ðе удалоÑÑŒ открыть URL: "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>ЗапиÑÑŒ TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>ПерезапиÑать файл игрока 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Обнаружена недопуÑÑ‚Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Текущий amiibo был убран</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Ошибка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¸Ð³Ñ€Ð° не ищет amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Файл Amiibo (%1);; Ð’Ñе Файлы (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Загрузить Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Ошибка загрузки данных Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Выбранный файл не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимым amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Выбранный файл уже иÑпользуетÑÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> - <translation type="unfinished"/> + <translation>Проверка не удалаÑÑŒ Ð´Ð»Ñ Ñледующих файлов: + +%1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> - <translation type="unfinished"/> + <translation>Ðет доÑтупной прошивки</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> - <translation type="unfinished"/> + <translation>ПожалуйÑта, уÑтановите прошивку, чтобы иÑпользовать приложение Ðльбом.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> - <translation type="unfinished"/> + <translation>Ðпплет Ðльбом</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> - <translation type="unfinished"/> + <translation>Ðпплет Ðльбом недоÑтупен. ПожалуйÑта, переуÑтановите прошивку.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> - <translation type="unfinished"/> + <translation>ПожалуйÑта, уÑтановите прошивку, чтобы иÑпользовать приложение Кабинет.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> - <translation type="unfinished"/> + <translation>Кабинет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> - <translation type="unfinished"/> + <translation>Приложение Кабинет недоÑтупно. ПожалуйÑта, переуÑтановите прошивку.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> - <translation type="unfinished"/> + <translation>ПожалуйÑта, уÑтановите прошивку, чтобы иÑпользовать редактор Mii.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> - <translation type="unfinished"/> + <translation>Mii Edit Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> - <translation type="unfinished"/> + <translation>Mii редактор недоÑтупен. ПожалуйÑта, переуÑтановите прошивку.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> - <translation type="unfinished"/> + <translation>ПожалуйÑта, уÑтановите прошивку, чтобы иÑпользовать меню контроллера.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Ðпплет контроллера</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> - <translation type="unfinished"/> + <translation>Меню контроллера недоÑтупно. ПожалуйÑта, переуÑтановите прошивку.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Сделать Ñкриншот</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Изображение PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>СоÑтоÑние TAS: ВыполнÑетÑÑ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>СоÑтоÑние TAS: ЗапиÑываетÑÑ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>СоÑтоÑние TAS: ПроÑтой %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>СоÑтоÑние TAS: Ðеверное</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>[&S] ОÑтановка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>[&S] Ðачать</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>[&E] Закончить запиÑÑŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>[&E] ЗапиÑÑŒ</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>МаÑштаб: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>СкороÑть: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>СкороÑть: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Игра: %1 FPS (Ðеограниченно)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Игра: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Кадр: %1 мÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>БЕЗ СГЛÐЖИВÐÐИЯ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>ГРОМКОСТЬ: ЗÐГЛУШЕÐÐ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>ГРОМКОСТЬ: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Подтвердите перераÑчет ключа</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Ð’Ñ‹ ÑобираетеÑÑŒ принудительно переÑчитать вÑе ваши ключи. -ЕÑли вы не знаете, что Ñто значит или что вы делаете, -Ñто потенциально разрушительное дейÑтвие. -ПожалуйÑта, убедитеÑÑŒ, что Ñто то, что вы хотите Ñделать -и при желании Ñделайте резервные копии. - -Ðто удалит ваши автоматичеÑки Ñгенерированные файлы ключей и повторно запуÑтит модуль раÑчета ключей.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>ОтÑутÑтвуют предохранители</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- ОтÑутÑтвует BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- ОтÑутÑтвует BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- ОтÑутÑтвует PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Компоненты раÑчета отÑутÑтвуют</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Получение ключей... -Ðто может занÑть до минуты в завиÑимоÑти -от производительноÑти вашей ÑиÑтемы.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Получение ключей</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Ðе удалоÑÑŒ раÑшифровать ÑиÑтемный архив</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Ключи ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ Ñмогли раÑшифровать прошивку. <br>ПожалуйÑта, Ñледуйте <a href='https://yuzu-emu.org/help/quickstart/'>краткому руководÑтву Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ yuzu</a> чтобы получить вÑе ваши ключи, прошивку и игры.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Выберите цель Ð´Ð»Ñ Ð´Ð°Ð¼Ð¿Ð° RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>ПожалуйÑта, выберите, какой RomFS вы хотите Ñдампить.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>Ð’Ñ‹ уверены, что хотите закрыть yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6130,7 +6082,7 @@ Would you like to bypass this and exit anyway?</source> <message> <location filename="../../src/yuzu/game_list.cpp" line="557"/> <source>Remove Play Time Data</source> - <translation type="unfinished"/> + <translation>Удалить данные о времени игры</translation> </message> <message> <location filename="../../src/yuzu/game_list.cpp" line="558"/> @@ -6171,7 +6123,7 @@ Would you like to bypass this and exit anyway?</source> <message> <location filename="../../src/yuzu/game_list.cpp" line="567"/> <source>Verify Integrity</source> - <translation type="unfinished"/> + <translation>Проверить целоÑтноÑть</translation> </message> <message> <location filename="../../src/yuzu/game_list.cpp" line="568"/> @@ -6204,64 +6156,64 @@ Would you like to bypass this and exit anyway?</source> <translation>СвойÑтва</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Сканировать подпапки</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Удалить папку Ñ Ð¸Ð³Ñ€Ð°Ð¼Ð¸</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² ПеремеÑтить вверх</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ ПеремеÑтить вниз</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Открыть раÑположение папки</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>ОчиÑтить</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>ИмÑ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>СовмеÑтимоÑть</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>ДополнениÑ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Тип файла</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Размер</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> - <translation type="unfinished"/> + <translation>Ð’Ñ€ÐµÐ¼Ñ Ð¸Ð³Ñ€Ñ‹</translation> </message> </context> <context> @@ -6330,7 +6282,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Ðажмите дважды, чтобы добавить новую папку в ÑпиÑок игр</translation> </message> @@ -6343,12 +6295,12 @@ Would you like to bypass this and exit anyway?</source> <translation><numerusform>%1 из %n результат(ов)</numerusform><numerusform>%1 из %n результат(ов)</numerusform><numerusform>%1 из %n результат(ов)</numerusform><numerusform>%1 из %n результат(ов)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>ПоиÑк:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Введите текÑÑ‚ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка</translation> </message> @@ -6573,7 +6525,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/uisettings.h" line="247"/> <source>Toggle Renderdoc Capture</source> - <translation type="unfinished"/> + <translation>Переключить захват Renderdoc</translation> </message> <message> <location filename="../../src/yuzu/uisettings.h" line="248"/> @@ -6816,7 +6768,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/main.ui" line="142"/> <source>&Amiibo</source> - <translation type="unfinished"/> + <translation>&Amiibo</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="151"/> @@ -6860,178 +6812,173 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>[&R] Переинициализировать ключи...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> - <translation type="unfinished"/> + <translation>&Проверить уÑтановленное Ñодержимое</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>[&A] О yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>[&W] Режим одного окна</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>[&F] Параметры...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>[&O] Отображать заголовки виджетов дока</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>[&F] Показать панель поиÑка</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>[&S] Показать панель ÑтатуÑа</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Показать панель ÑтатуÑа</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>[&B] ПроÑмотреть публичные игровые лобби</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>[&C] Создать комнату</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>[&L] Покинуть комнату</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>[&D] ПрÑмое подключение к комнате</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>[&S] Показать текущую комнату</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>[&U] ПолноÑкранный</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>[&R] ПерезапуÑтить</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>[&A] Загрузить/Удалить Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>[&R] Сообщить о ÑовмеÑтимоÑти</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>[&M] Открыть Ñтраницу модов</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>[&Q] Открыть руководÑтво пользователÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>[&F] ЧÐВО</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>[&Y] Открыть папку yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>[&C] Сделать Ñкриншот</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> - <translation type="unfinished"/> + <translation>Открыть &Album</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> - <translation type="unfinished"/> + <translation>&УÑтановить никнейм и владельца</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> - <translation type="unfinished"/> + <translation>&Удалить данные игры</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> - <translation type="unfinished"/> + <translation>&ВоÑÑтановить Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> - <translation type="unfinished"/> + <translation>&Форматировать Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> - <translation type="unfinished"/> + <translation>Открыть &Mii Editor</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>[&C] ÐаÑтройка TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>[&U] ÐаÑтроить текущую игру...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>[&S] ЗапуÑтить</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>[&S] СброÑить</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>[&E] ЗапиÑÑŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> - <translation type="unfinished"/> + <translation>Открыть &меню контроллера</translation> </message> </context> <context> @@ -8069,7 +8016,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../../src/yuzu/applets/qt_controller.ui" line="2653"/> <source>Not enough controllers</source> - <translation type="unfinished"/> + <translation>ÐедоÑтаточно контроллеров</translation> </message> <message> <location filename="../../src/yuzu/applets/qt_controller.cpp" line="485"/> diff --git a/dist/languages/sv.ts b/dist/languages/sv.ts index 0233df24c..3b10fd68f 100644 --- a/dist/languages/sv.ts +++ b/dist/languages/sv.ts @@ -679,759 +679,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Anpassad RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Notera: detta kan bli överskritt medans regionsinställningarna är satta till auto-select</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Region:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Tidszon:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>FrÃ¥ga efter användare vid spelstart</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Pausa emulationen när fönstret är i bakgrunden</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Göm mus när inaktiv</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Auto</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Noggrann</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Osäker</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (stänger av de flesta optimeringar)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Ingen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Standard (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Tvinga 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Tvinga 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Tänj över fönster</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Standard</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japanska (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Franska (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Tyska (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Italienska (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Spanska (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Kinesiska</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Koreanska (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Holländska (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portugisiska (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Ryska (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Taiwanesiska</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Brittisk Engelska</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Kanadensisk Franska</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Latinamerikansk Spanska</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Förenklad Kinesiska</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Traditionell Kinesiska (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>USA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Europe</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Australien</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Kina</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Korea</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Taiwan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Kuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Egypten</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hongkong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Island</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libyen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portugal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Turkiet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Universal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Dockad</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Handheld</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2297,33 +2297,33 @@ avgjord kod.</div> <translation>Bakgrundsfärg:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation type="unfinished"/> </message> @@ -3388,6 +3388,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3722,42 +3731,47 @@ Current values are %1% and %2% respectively.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Tillägg</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>System</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Avancerade Grafikinställningar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Ljud</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>egenskaper</translation> </message> @@ -3861,67 +3875,67 @@ Current values are %1% and %2% respectively.</source> <translation>Skriv in användarnamn för den nya användaren:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Skriv in ett nytt användarnamn:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Välj Användarbild</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG-bilder (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Fel när bilden raderades</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Fel uppstod när man försökte överskriva föregÃ¥ende bild vid: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Fel när fil raderades</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Kan inte radera existerande fil: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Fel när användarbild skapades</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Oförmögen att skapa katalog %1 för att spara användarbilder.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Fel under kopiering av användarbild</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Oförmögen att kopiera bild frÃ¥n %1 till %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation type="unfinished"/> </message> @@ -3929,17 +3943,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Bekräfta Radering</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation type="unfinished"/> @@ -4092,7 +4106,7 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4804,1095 +4818,1029 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Felaktig Vulkaninstallation Upptäckt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Laddar WebApplet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Avaktivera Webbappletten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Paus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Varning FörÃ¥ldrat Spelformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Fel vid laddning av ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>ROM-formatet stöds inte.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Spardata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod-data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Fel Öppnar %1 Mappen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Mappen finns inte!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Ta bort katalog</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>FramgÃ¥ngsrikt borttagen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <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="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Ta Bort Anpassad Spelkonfiguration?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Radera fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Fel När Anpassad Konfiguration Raderades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS Extraktion Misslyckades!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Full</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Skelett</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Välj RomFS Dump-Läge</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Extraherar RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Avbryt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS Extraktion Lyckades!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Operationen var lyckad.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Fel under öppning av %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Välj Katalog</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Egenskaper</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>Spelegenskaperna kunde inte laddas.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Ladda Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Öppna Extraherad ROM-Katalog</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Ogiltig Katalog Vald</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Installera filer</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Installerar Fil "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Installera resultat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Systemapplikation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Systemarkiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Systemapplikationsuppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Firmwarepaket (Typ A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Firmwarepaket (Typ B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Spel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Speluppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Spel DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Välj NCA-Installationsläge...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Misslyckades med Installationen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Filen hittades inte</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Filen "%1" hittades inte</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation> HÃ¥rdvarukraven uppfylls ej</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>yuzu Konto hittades inte</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Fel när URL öppnades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <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="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS Inspelning</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Överskriv spelare 1:s fil?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Ogiltig konfiguration upptäckt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Den aktuella amiibon har avlägsnats</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Fel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>Det aktuella spelet letar ej efter amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo Fil (%1);; Alla Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Ladda Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Fel vid laddning av Amiibodata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Den valda filen är inte en giltig amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Den valda filen är redan använd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Ett okänt fel har inträffat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Kontroll-Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Skärmdump</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG Bild (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAStillstÃ¥nd: pÃ¥gÃ¥ende %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAStillstÃ¥nd: spelar in %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAStillstÃ¥nd: inaktiv %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAStillstÃ¥nd: ogiltigt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Hastighet: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Hastighet: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Spel: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Ruta: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Bekräfta Nyckel Rederivering</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Du hÃ¥ller pÃ¥ att tvinga rederive alla dina nycklar. -Om du inte vet vad det här betyder eller vad du gör, -detta kan orsaka stora problem. -Se till att det här är vad du vill ha -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="4762"/> - <source>Missing fuses</source> - <translation>Saknade säkringar</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- Saknar BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- Saknar BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- Saknar PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Deriveringsdelar saknas</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Härleda nycklar... -Detta kan ta upp till en minut beroende -pÃ¥ systemets prestanda.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Härleda Nycklar</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Välj RomFS Dumpa MÃ¥l</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6170,62 +6118,62 @@ Vill du strunta i detta och avsluta ändÃ¥?</translation> <translation>Egenskaper</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Skanna Underkataloger</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Radera Spelkatalog</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Flytta upp</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Flytta ner</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Öppna Sökvägsplats</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Rensa</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Namn</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Kompatibilitet</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Add-Ons</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Filtyp</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Storlek</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6296,7 +6244,7 @@ Vill du strunta i detta och avsluta ändÃ¥?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Dubbelklicka för att lägga till en ny mapp i spellistan.</translation> </message> @@ -6309,12 +6257,12 @@ Vill du strunta i detta och avsluta ändÃ¥?</translation> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filter:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Ange mönster för att filtrera</translation> </message> @@ -6824,176 +6772,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Visa Statusfält</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/tr_TR.ts b/dist/languages/tr_TR.ts index 2b9fd3c4f..96fe57f9b 100644 --- a/dist/languages/tr_TR.ts +++ b/dist/languages/tr_TR.ts @@ -390,7 +390,7 @@ Bu iÅŸlem onların hem forum kullanıcı adını hem de IP adresini banlar.</tra <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="33"/> <source>Mute audio</source> - <translation type="unfinished"/> + <translation>Sesi kapat</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="34"/> @@ -560,7 +560,7 @@ Bu iÅŸlem onların hem forum kullanıcı adını hem de IP adresini banlar.</tra <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="95"/> <source>VSync Mode:</source> - <translation type="unfinished"/> + <translation>VSync Modu:</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="96"/> @@ -679,761 +679,761 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>Özel Saat Dilimi</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> - <translation type="unfinished"/> + <translation>Dil:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Not: bu ayar bölge ayarı otomatiÄŸe alındığında yok sayılabilir.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Bölge:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Saat Dilimi:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Ses Çıkış Modu:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> - <translation type="unfinished"/> + <translation>Konsol Modu:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Oyun baÅŸlatılırken kullanıcı verisi iste</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Arka plana alındığında emülasyonu duraklat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Hareketsizlik durumunda imleci gizle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> - <translation type="unfinished"/> + <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> - <translation type="unfinished"/> + <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly Shaderları, Yalnızca NVIDIA için)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Deneysel, Yalnızca Mesa için)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> - <translation type="unfinished"/> + <translation>Normal</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> - <translation type="unfinished"/> + <translation>Yüksek</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> - <translation type="unfinished"/> + <translation>Ekstrem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Otomatik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>DoÄŸru</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Güvensiz</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoya (çoÄŸu optimizasyonu kapatır)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> - <translation type="unfinished"/> + <translation>Dinamik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Kenarlıksız Tam Ekran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Ayrılmış Tam Ekran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Video Çıkışı Yok</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU Video Decoding</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU Video Decoding (Varsayılan)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> - <translation type="unfinished"/> + <translation>0.5X (360p/540p) [DENEYSEL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [DENEYSEL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [DENEYSEL]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>En Yakın KomÅŸu Algoritması</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gausyen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Süper Çözünürlük</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Yok</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Varsayılan (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>4:3'e Zorla</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>21:9'a Zorla</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>16:10'a Zorla</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Ekrana Sığdır</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Otomatik</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Varsayılan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Japonca (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Amerikan İngilizcesi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Fransızca (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Almanca (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>İtalyanca (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>İspanyolca (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Çince</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Korece (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Flemenkçe (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Portekizce (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Rusça (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Tayvanca</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>İngiliz İngilizcesi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Kanada Fransızcası</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Latin Amerika İspanyolcası</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>BasitleÅŸtirilmiÅŸ Çince</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Geleneksel Çince (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Brezilya Portekizcesi (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Japonya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>ABD</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Avrupa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Avustralya </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Çin</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Kore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Tayvan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> - <translation type="unfinished"/> + <translation>Otomatik (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> - <translation type="unfinished"/> + <translation>Varsayılan (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Küba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Mısır</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>İrlanda</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-İrlanda</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>MT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hong Kong</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>İzlanda</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>İran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>İsrail</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaika</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navaho</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>Yeni Zelanda</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>Chatham Adaları</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Polonya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Portekiz</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapur</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Türkiye</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Evrensel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Dock Modu Aktif</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Taşınabilir</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> - <translation type="unfinished"/> + <translation>Her zaman sor (Varsayılan)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> - <translation type="unfinished"/> + <translation>Asla sorma</translation> </message> </context> <context> @@ -2263,7 +2263,7 @@ Compute pipelines are always enabled on all other drivers.</source> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="52"/> <source>Linux</source> - <translation type="unfinished"/> + <translation>Linux</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="109"/> @@ -2309,35 +2309,35 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Arkaplan Rengi:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> - <translation type="unfinished"/> + <translation>Kapalı</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> - <translation type="unfinished"/> + <translation>VSync Kapalı</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> - <translation type="unfinished"/> + <translation>Önerilen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> - <translation type="unfinished"/> + <translation>Açık</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> - <translation type="unfinished"/> + <translation>Vsync Açık</translation> </message> </context> <context> @@ -3401,6 +3401,15 @@ Eksenleri ters çevirmek için, önce joystickinizi dikey sonra yatay olarak har </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3576,7 +3585,7 @@ Eksenleri ters çevirmek için, önce joystickinizi dikey sonra yatay olarak har <message> <location filename="../../src/yuzu/configuration/configure_mouse_panning.ui" line="24"/> <source>Sensitivity</source> - <translation type="unfinished"/> + <translation>Hassasiyet</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_mouse_panning.ui" line="30"/> @@ -3625,7 +3634,7 @@ Eksenleri ters çevirmek için, önce joystickinizi dikey sonra yatay olarak har <message> <location filename="../../src/yuzu/configuration/configure_mouse_panning.ui" line="155"/> <source>Minimum</source> - <translation type="unfinished"/> + <translation>Minimum</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_mouse_panning.ui" line="195"/> @@ -3735,42 +3744,47 @@ Current values are %1% and %2% respectively.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Eklentiler</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Sistem</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Grafikler</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>GeliÅŸmiÅŸ Grafikler</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Ses</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Kontrol Profilleri</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Özellikler</translation> </message> @@ -3874,67 +3888,67 @@ Current values are %1% and %2% respectively.</source> <translation>Yeni kullanıcı için yeni bir kullanıcı adı giriniz:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Yeni bir kullanıcı adı giriniz:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Kullanıcı Resmi Seçin</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG Görüntüler (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Resim silinirken hata oluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Eski resmin üzerine yazılmaya çalışırken hata oluÅŸtu: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Dosyayı silerken hata oluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Mevcut %1 dosyası silinemedi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Kullanıcı görüntü klasörünü oluÅŸtururken hata</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Kullanıcı görüntülerini depolamak için %1 klasörü oluÅŸturulamadı.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Kullanıcı görüntüsünü kopyalarken hata</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Görüntü %1'den %2'ye kopyalanamadı</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Kullanıcı görüntüsünü yeniden boyutlandırma hatası</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Görüntü yeniden boyutlandırılamıyor</translation> </message> @@ -3942,17 +3956,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Kullanıcıyı silmek istediÄŸinize emin misiniz? Kayıtlı oyun verileri de birlikte silinecek.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Silmeyi Onayla</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>İsim: %1 @@ -4106,7 +4120,7 @@ UUID: %2</translation> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Hata: "%1" bölgesi için "%2" geçerli bir dil deÄŸil</translation> </message> @@ -4818,601 +4832,601 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Bozuk Vulkan Kurulumu Algılandı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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çılışta Vulkan baÅŸlatılırken hata. Hata yardımını görüntülemek için <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>buraya tıklayın</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Web Uygulaması Yükleniyor...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Web Uygulamasını Devre Dışı Bırak</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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 uygulamasını kapatmak bilinmeyen hatalara neden olabileceÄŸinden dolayı sadece Super Mario 3D All-Stars için kapatılması önerilir. Web uygulamasını kapatmak istediÄŸinize emin misiniz? (Hata ayıklama ayarlarından tekrar açılabilir)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <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="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <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="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> - <translation type="unfinished"/> + <translation>Sessizden çıkar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> - <translation type="unfinished"/> + <translation>Sessize al</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Son Dosyaları Temizle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Devam Et</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Duraklat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Uyarı, Eski Oyun Formatı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>ROM yüklenirken hata oluÅŸtu!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>Bu ROM biçimi desteklenmiyor.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <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="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <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="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Yazılım kapatılıyor...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Kayıt Verisi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod Verisi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>%1 klasörü açılırken hata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Klasör mevcut deÄŸil!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <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="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <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="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>İçerik Kaldırma Hatası</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Güncelleme Kaldırma hatası</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>DLC Kaldırma Hatası</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>YüklenmiÅŸ Oyun İçeriÄŸini Kaldırmak İstediÄŸinize Emin Misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>YüklenmiÅŸ Oyun Güncellemesini Kaldırmak İstediÄŸinize Emin Misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>YüklenmiÅŸ DLC'yi Kaldırmak İstediÄŸinize Emin Misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Girdiyi Kaldır</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>BaÅŸarıyla Kaldırıldı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <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="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <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="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <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="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <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="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <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="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <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="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <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="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <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="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <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="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Dosyayı Sil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <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="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <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="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <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="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <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="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Vulkan Pipeline ÖnbelleÄŸi Kaldırılırken Hata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Sürücü pipeline önbelleÄŸi kaldırılamadı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <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="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <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="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <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="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <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="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <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="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <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="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <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="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS Çıkartımı BaÅŸarısız!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Full</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Çerçeve</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>RomFS Dump Modunu Seçiniz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>RomFS çıkartılıyor...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>İptal</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS Çıkartımı BaÅŸarılı!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>İşlem baÅŸarıyla tamamlandı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Kısayol OluÅŸtur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>%1 dizinine kısayol oluÅŸturuldu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Bu seçenek, ÅŸu anki AppImage dosyasının kısayolunu oluÅŸturacak. Uygulama güncellenirse kısayol çalışmayabilir. Devam edilsin mi?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Simge OluÅŸtur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Simge dosyası oluÅŸturulamadı. "%1" dizini yok ve oluÅŸturulamıyor.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>%1 Açılırken Bir Hata OluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Klasör Seç</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Özellikler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>Oyun özellikleri yüklenemedi.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Dosya Aç</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Çıkartılmış ROM klasörünü aç</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Geçersiz Klasör Seçildi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Dosya Kur</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>"%1" dosyası kuruluyor...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Kurulum Sonuçları</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n dosya güncel olarak yüklendi @@ -5420,7 +5434,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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n dosyanın üstüne yazıldı @@ -5428,7 +5442,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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n dosya yüklenemedi @@ -5436,485 +5450,419 @@ 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="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Sistem Uygulaması</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Sistem ArÅŸivi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Sistem Uygulama Güncellemesi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Yazılım Paketi (Tür A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Yazılım Paketi (Tür B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Oyun</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Oyun Güncellemesi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Oyun DLC'si</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta BaÅŸlık</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>NCA Kurulum Tipi Seçin...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Kurulum BaÅŸarısız Oldu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <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="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Dosya Bulunamadı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Dosya "%1" Bulunamadı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>Tamam</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Donanım gereksinimleri karşılanmıyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Sisteminiz, önerilen donanım gereksinimlerini karşılamıyor. Uyumluluk raporlayıcı kapatıldı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Kayıp yuzu Hesabı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>URL açılırken bir hata oluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>URL "%1" açılamıyor.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS kayıtta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <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="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Geçersiz yapılandırma tespit edildi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Amiibo kaldırıldı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Hata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <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="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo Dosyası (%1);; Tüm Dosyalar (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Amiibo Yükle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Amiibo verisi yüklenirken hata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <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="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <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="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Bilinmeyen bir hata oluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Kontrolcü Uygulaması</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Ekran Görüntüsü Al</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG görüntüsü (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS durumu: %1%2 çalışıyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS durumu: %1 kaydediliyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS durumu: %1%2 boÅŸta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS durumu: Geçersiz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Çalıştırmayı durdur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&BaÅŸlat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>K&aydetmeyi Durdur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>K&aydet</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <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="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Hız %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Hız: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Oyun: %1 FPS (Sınırsız)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Oyun: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Kare: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>AA YOK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>SES: KAPALI</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>SES: %%1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Anahtar Yeniden Türetimini Onayla</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Tüm anahtarlarınızın yeniden türetilmesini zorlamak üzeresiniz. -Bunun ne anlama geldiÄŸini veya ne yaptığınızı bilmiyorsanız. -bu muhtemel zarar verici bir eylem. -Lütfen bunun istediÄŸiniz ÅŸey olduÄŸundan emin olun -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="4762"/> - <source>Missing fuses</source> - <translation>Anahtarlar Kayıp</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- BOOT0 Kayıp</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- BCPKG2-1-Normal-Main Kayıp</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- PRODINFO Kayıp</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Türeten BileÅŸenleri Kayıp</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Anahtarlar türetiliyor... -Bu sistem performansınıza baÄŸlı olarak -bir dakika kadar zaman alabilir.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Anahtarlar Türetiliyor</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>RomFS Dump Hedefini Seçiniz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <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="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <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="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -5975,22 +5923,22 @@ Görmezden gelip kapatmak ister misiniz?</translation> <message> <location filename="../../src/yuzu/configuration/shared_translation.h" line="51"/> <source>Normal</source> - <translation type="unfinished"/> + <translation>Normal</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.h" line="52"/> <source>High</source> - <translation type="unfinished"/> + <translation>Yüksek</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.h" line="53"/> <source>Extreme</source> - <translation type="unfinished"/> + <translation>Ekstrem</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.h" line="57"/> <source>Vulkan</source> - <translation type="unfinished"/> + <translation>Vulkan</translation> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.h" line="58"/> @@ -6192,62 +6140,62 @@ Görmezden gelip kapatmak ister misiniz?</translation> <translation>Özellikler</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Alt Klasörleri Tara</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Oyun Konumunu Kaldır</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–²Yukarı Git</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼AÅŸağı Git</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Oyun Dosyası Konumunu Aç</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Temizle</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>İsim</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Uyumluluk</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Eklentiler</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Dosya türü</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Boyut</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6318,7 +6266,7 @@ Görmezden gelip kapatmak ister misiniz?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Oyun listesine yeni bir klasör eklemek için çift tıklayın.</translation> </message> @@ -6331,12 +6279,12 @@ Görmezden gelip kapatmak ister misiniz?</translation> <translation><numerusform>%n sonucun %1'i</numerusform><numerusform>%n sonucun %1'i</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Filtre:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Filtrelemek için bir düzen giriniz</translation> </message> @@ -6803,7 +6751,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/main.ui" line="142"/> <source>&Amiibo</source> - <translation type="unfinished"/> + <translation>&Amiibo</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="151"/> @@ -6847,176 +6795,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Anahtarları Yeniden Kur...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Yuzu Hakkında</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>&Tek Pencere Modu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>&Yapılandır...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>D&ock Widget BaÅŸlıkları'nı Göster</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>&Filtre ÇubuÄŸu'nu Göster</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>&Durum ÇubuÄŸu'nu Göster</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Durum ÇubuÄŸunu Göster</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Herkese Açık Oyun Lobilerine Göz At</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Oda OluÅŸtur</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Odadan Ayrıl</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Odaya Direkt BaÄŸlan</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Åžu Anki Odayı Göster</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>&Tam Ekran</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Yeniden BaÅŸlat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>&Amiibo Yükle/Kaldır</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Uyumluluk Bildir</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>&Mod Sayfasını Aç</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>&Hızlı BaÅŸlangıç Kılavuzunu Aç</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&SSS</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>&yuzu Klasörünü Aç</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Ekran Görüntüsü Al</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&TAS'i Ayarla...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>&Geçerli Oyunu Yapılandır...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>B&aÅŸlat</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Sıfırla</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>K&aydet</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/uk.ts b/dist/languages/uk.ts index fffc557d5..2c78cf79a 100644 --- a/dist/languages/uk.ts +++ b/dist/languages/uk.ts @@ -682,759 +682,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>КориÑтувацький RTC</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Примітка: може бути перезапиÑано Ñкщо регіон вибираєтьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Регіон:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>ЧаÑовий поÑÑ:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Режим відÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð²ÑƒÐºÑƒ:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Запитувати кориÑтувача під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку гри</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>ПризупинÑти емулÑцію у фоновому режимі</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>ÐŸÑ€Ð¸Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¸ÑˆÑ– при бездіÑльноÑті</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>ЦП</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Без ÑтиÑÐ½ÐµÐ½Ð½Ñ (Ðайкраща ÑкіÑть)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>ВС1 (Ðизька ÑкіÑть)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>ВС3 (Ð¡ÐµÑ€ÐµÐ´Ð½Ñ ÑкіÑть)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (аÑемблерні шейдери, лише Ð´Ð»Ñ NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (ЕкÑпериментально, лише Ð´Ð»Ñ Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Ðормальна</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>ВиÑока</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>ЕкÑтрим</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Ðвто</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Точно</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Ðебезпечно</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Параноїк (відключає більшіÑть оптимізацій)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Вікно без рамок</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>ЕкÑклюзивний повноекранний</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>ВідÑутніÑть відеовиходу</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Ð”ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐµÐ¾ на ЦП</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Ð”ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐµÐ¾ на ГП (за замовчуваннÑм)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [ЕКСПЕРИМЕÐТÐЛЬÐЕ]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [ЕКСПЕРИМЕÐТÐЛЬÐО]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Ðайближчий ÑуÑід</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Білінійне</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Бікубічне</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>ГауÑа</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Вимкнено</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>За замовчуваннÑм (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>ЗмуÑити 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>ЗмуÑити 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>ЗмуÑити 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>РозтÑгнути до вікна</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Ðвтоматично</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>За замовчуваннÑм</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>ЯпонÑька (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>ÐмериканÑька англійÑька</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Французька (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Ðімецька (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>ІталійÑька (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>ІÑпанÑька (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>КитайÑька</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>КорейÑька (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>ГолландÑька (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>ПортугальÑька (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>РоÑійÑька (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>ТайванÑька</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>БританÑька англійÑька</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>КанадÑька французька</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>ЛатиноамериканÑька Ñ–ÑпанÑька</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Спрощена китайÑька</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Традиційна китайÑька (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>БразильÑька португальÑька (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>ЯпоніÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>СШÐ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Європа</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>ÐвÑтраліÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Китай</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>КореÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Тайвань</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Ðвто (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>За замовчуваннÑм (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Куба</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Єгипет</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Ейре</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Ейре</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Гринвіч</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Гонконг</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>ІÑландіÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Іран</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Ізраїль</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Ямайка</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Кваджалейн</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>ЛівіÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Ðавахо</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Польща</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>ПортугаліÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Сінгапур</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Туреччина</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>УніверÑальний</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>ЗулуÑи</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Моно</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Стерео</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Об'ємний звук</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>У док-Ñтанції</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Портативний</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2314,33 +2314,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Фоновий колір:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Вимкнено</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Верт. Ñинхронізацію вимкнено</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Рекомендовано</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Увімкнено</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>Верт. ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð°</translation> </message> @@ -3406,6 +3406,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3741,42 +3750,47 @@ Current values are %1% and %2% respectively.</source> <translation>ДеÑкі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупні тільки тоді, коли гру не запущено.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>ДоповненнÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>СиÑтема</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>ЦП</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Графіка</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Розш. Графіка</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Ðудіо</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Профілі вводу</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>ВлаÑтивоÑті</translation> </message> @@ -3880,67 +3894,67 @@ Current values are %1% and %2% respectively.</source> <translation>Введіть ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ профілю:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Введіть нове ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Оберіть Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Помилка під Ñ‡Ð°Ñ Ñпроби перезапиÑу попереднього Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð²: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ наÑвний файл: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸ кориÑтувацьких зображень</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Ðе вийшло Ñтворити папку %1 Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½ÑŒ кориÑтувача.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Помилка під Ñ‡Ð°Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Ðе вийшло Ñкопіювати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð· %1 у %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Помилка під Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ розміру Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Ðеможливо змінити розмір зображеннÑ</translation> </message> @@ -3948,17 +3962,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Видалити цього кориÑтувача? УÑÑ– збережені дані кориÑтувача буде видалено.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Підтвердити видаленнÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Ім'Ñ: %1 @@ -4112,7 +4126,7 @@ UUID: %2</translation> <translation>Ядро</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4824,601 +4838,601 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>ТелеметріÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>ВиÑвлено пошкоджену інÑталÑцію Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Запущено гру</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²ÐµÐ±-аплета...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Вимкнути веб-аплет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>КількіÑть Ñтворюваних шейдерів на цей момент</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Поточний обраний множник маÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑŒÐ½Ð¾Ñ— здатноÑті.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Увімкнути звук</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Вимкнути звук</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Скинути гучніÑть</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>[&C] ОчиÑтити нещодавні файли</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>[&C] Продовжити</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>[&P] Пауза</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ñтарілий формат гри</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>Формат ROM'а не підтримуєтьÑÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— відеоÑдра.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>СталаÑÑ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° помилка. Будь лаÑка, перевірте журнал Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð¸Ñ†ÑŒ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-бітний)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-бітний)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Закриваємо програму...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>ЗбереженнÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Дані модів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¿Ð°Ð¿ÐºÐ¸ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Папка не Ñ–Ñнує!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñного кешу шейдерів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Ðе вдалоÑÑ Ñтворити папку кешу шейдерів Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð²Ð¼Ñ–Ñту</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½ÑŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Видалити вÑтановлений вміÑÑ‚ ігор?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Видалити вÑтановлені Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Видалити вÑтановлені DLC гри?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Видалити запиÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>УÑпішно видалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>Ð’Ñтановлену гру уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>Ð’Ñтановлене Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>Ð”Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не було вÑтановлено оновленнÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>Ð”Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не було вÑтановлено DLC.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>Ð’Ñтановлений DLC %1 було уÑпішно видалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Видалити переноÑний кеш шейдерів OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Видалити переноÑний кеш шейдерів Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Видалити веÑÑŒ переноÑний кеш шейдерів?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Видалити кориÑтувацьке Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð¸?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Видалити кеш-Ñховище?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Видалити файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñного кешу шейдерів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>Кеш шейдерів Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не Ñ–Ñнує.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>ПереноÑний кеш шейдерів уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ переноÑний кеш шейдерів.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð½Ð¾Ð³Ð¾ кешу Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ конвеєрний кеш шейдерів.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñного кешу шейдерів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>ПереноÑний кеш шейдерів уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸ переноÑного кешу шейдерів.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувацького налаштуваннÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>КориÑтувацьких налаштувань Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не Ñ–Ñнує.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>КориÑтувацьке Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð¸ уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувацьке Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð¸.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ RomFS!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Повний</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Скелет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Виберіть режим дампа RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>СкаÑувати</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ RomFS пройшло уÑпішно!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>ÐžÐ¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°ÑÑ ÑƒÑпішно.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> + <source>Verifying integrity...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> + <source>Integrity verification succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> - <source>Verifying integrity...</source> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> - <source>Integrity verification succeeded!</source> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Створити Ñрлик</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>УÑпішно Ñтворено Ñрлик у %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Створити іконку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Обрати папку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>ВлаÑтивоÑті</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ влаÑтивоÑті гри.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Завантажити файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Відкрити папку вилученого ROM'а</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Вибрано неприпуÑтиму папку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Ð’Ñтановити файли</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <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="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Результати вÑтановленнÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n файл було нещодавно вÑтановлено @@ -5428,7 +5442,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="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n файл було перезапиÑано @@ -5438,7 +5452,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="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n файл не вдалоÑÑ Ð²Ñтановити @@ -5448,485 +5462,419 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>СиÑтемний додаток</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>СиÑтемний архів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтемного додатку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Пакет прошивки (Тип Ð)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Пакет прошивки (Тип Б)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Гра</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC до гри</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Дельта-титул</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Виберіть тип уÑтановки NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Помилка вÑтановленнÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Тип додатку, Ñкий ви вибрали Ð´Ð»Ñ NCA, недійÑний.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Файл не знайдено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Файл "%1" не знайдено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>ОК</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Ðе задоволені ÑиÑтемні вимоги</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>ВідÑутній обліковий Ð·Ð°Ð¿Ð¸Ñ yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ URL: "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Ð—Ð°Ð¿Ð¸Ñ TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>ПерезапиÑати файл Ð³Ñ€Ð°Ð²Ñ†Ñ 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>ВиÑвлено неприпуÑтиму конфігурацію</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Поточний amiibo було прибрано</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Помилка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>Поточна гра не шукає amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Файл Amiibo (%1);; Ð’ÑÑ– Файли (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Завантажити Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Обраний файл не Ñ” допуÑтимим amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Обраний файл уже викориÑтовуєтьÑÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Виникла невідома помилка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Ðплет контролера</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Зробити знімок екрану</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Стан TAS: ВиконуєтьÑÑ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Стан TAS: ЗапиÑуєтьÑÑ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Стан TAS: ПроÑтий %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Стан TAS: ÐеприпуÑтимий</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>[&S] Зупинка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>[&S] Почати</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>[&E] Закінчити запиÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>[&E] ЗапиÑ</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <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="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>МаÑштаб: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>ШвидкіÑть: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>ШвидкіÑть: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Гра: %1 FPS (Ðеобмежено)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Гра: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Кадр: %1 мÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>БЕЗ ЗГЛÐДЖУВÐÐÐЯ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>ГУЧÐІСТЬ: ЗÐГЛУШЕÐÐ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>ГУЧÐІСТЬ: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Підтвердіть перерахунок ключа</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Ви збираєтеÑÑ Ð¿Ñ€Ð¸Ð¼ÑƒÑово перерахувати вÑÑ– ваші ключі. -Якщо ви не знаєте, що це означає або що ви робите, -це потенційно руйнівна діÑ. -Будь лаÑка, переконайтеÑÑ, що це те, що ви хочете -Ñ–, по бажанню, зробіть резервні копії. - -Це видалить ваші автоматично згенеровані файли ключів Ñ– повторно запуÑтить модуль розрахунку ключів.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>ВідÑутні запобіжники</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- ВідÑутній BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation>- ВідÑутній BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - ВідÑутній PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Компоненти розрахунку відÑутні</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð²... -Це може зайнÑти до хвилини залежно від -від продуктивноÑті вашої ÑиÑтеми.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð²</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ ÑиÑтемний архів</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Ключі ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ змогли розшифрувати прошивку.<br>Будь лаÑка, дотримуйтеÑÑŒ <a href='https://yuzu-emu.org/help/quickstart/'>короткого керівництва кориÑтувача yuzu</a> щоб отримати вÑÑ– ваші ключі, прошивку та ігри.</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Оберіть ціль Ð´Ð»Ñ Ð´Ð°Ð¼Ð¿Ð° RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>Будь лаÑка, виберіть, Ñкий RomFS ви хочете здампити.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>Ви впевнені, що хочете закрити yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6204,62 +6152,62 @@ Would you like to bypass this and exit anyway?</source> <translation>ВлаÑтивоÑті</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Сканувати підпапки</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Видалити директорію гри</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² ПереміÑтити вверх</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ ПереміÑтити вниз</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Відкрити Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>ОчиÑтити</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Ðазва</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>СуміÑніÑть</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>ДоповненнÑ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Тип файлу</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>Розмір</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6330,7 +6278,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>ÐатиÑніть двічі, щоб додати нову папку до ÑпиÑку ігор</translation> </message> @@ -6343,12 +6291,12 @@ Would you like to bypass this and exit anyway?</source> <translation><numerusform>%1 із %n результат(ів)</numerusform><numerusform>%1 із %n результат(ів)</numerusform><numerusform>%1 із %n результат(ів)</numerusform><numerusform>%1 із %n результат(ів)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Пошук:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Введіть текÑÑ‚ Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ</translation> </message> @@ -6860,176 +6808,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>[&R] Переініціалізувати ключі...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>[&A] Про yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>[&W] Режим одного вікна</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>[&F] ÐалаштуваннÑ...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>[&O] Відображати заголовки віджетів дока</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>[&F] Показати панель пошуку</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>[&S] Показати панель ÑтатуÑу</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Показати панель ÑтатуÑу</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>[&B] ПереглÑнути публічні ігрові фойє</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>[&C] Створити кімнату</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>[&L] Залишити кімнату</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>[&D] ПрÑме під'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ кімнати</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>[&S] Показати поточну кімнату</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>[&U] Повноекранний</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>[&R] ПерезапуÑтити</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>[&A] Завантажити/Видалити Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>[&R] Повідомити про ÑуміÑніÑть</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>[&M] Відкрити Ñторінку модів</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>[&Q] Відкрити поÑібник кориÑтувача</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>[&F] ЧÐП</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>[&Y] Відкрити папку yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>[&C] Зробити знімок екрану</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>[&C] ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>[&U] Ðалаштувати поточну гру...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>[&S] Почати</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>[&S] Скинути</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>[&E] ЗапиÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/vi.ts b/dist/languages/vi.ts index 79ff28f92..15e631d97 100644 --- a/dist/languages/vi.ts +++ b/dist/languages/vi.ts @@ -682,759 +682,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC tuỳ chỉnh</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Lưu ý: Tuỳ chá»n nà y có thể bị ghi đè nếu cà i đặt vùng là chá»n tá»± động.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Vùng:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Múi giá»:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Chế độ đầu ra âm thanh:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Hiển thị cá»a sổ chá»n ngưá»i dùng khi bắt đầu game</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Tạm dừng giả láºp khi chạy ná»n</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Ẩn con trá» chuá»™t khi không dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Vô hiệu hoá applet tay cầm</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Không nén (Chất lượng tốt nhất)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Chất lượng thấp)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Chất lượng trung bình)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly Shaders, chỉ cho NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Thá» nghiệm, chỉ cho Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Bình thưá»ng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Cao</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Cá»±c đại</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Tá»± động</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>ChÃnh xác</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Không an toà n</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (vô hiệu hoá hầu hết sá»± tối ưu)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Cá»a sổ không viá»n</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Toà n mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Không có đầu ra video</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Giải mã video bằng CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Giải mã video bằng GPU (Mặc định)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [THỬ NGHIỆM]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [THỬ NGHIỆM]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest Neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>Gaussian</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Không có</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Mặc định (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Dùng 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Dùng 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Dùng 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Mở rá»™ng đến cá»a sổ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Tá»± động</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Mặc định</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Tiếng Nháºt (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Tiếng Anh Mỹ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Tiếng Pháp (French)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Tiếng Äức (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Tiếng à (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Tiếng Tây Ban Nha (Español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Tiếng Trung</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Tiếng Hà n (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Tiếng Hà Lan (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Tiếng Bồ Äà o Nha (Portuguese)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Tiếng Nga (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Tiếng Äà i Loan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Tiếng Anh Anh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Tiếng Pháp Canada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Tiếng Tây Ban Nha Mỹ Latinh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Tiếng Trung giản thể</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Tiếng Trung phồn thể (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Tiếng Bồ Äà o Nha Brasil (Português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Nháºt Bản</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>Hoa Kỳ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Châu Âu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Úc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Trung Quốc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Hà n Quốc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Äà i Loan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Tá»± động (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Mặc định (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Ai Cáºp</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hồng Kông</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Iceland</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Ba Lan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Bồ Äà o Nha</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Thổ NhÄ© Kỳ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Quốc tế</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Docked</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Handheld</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2314,33 +2314,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Mà u ná»n:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Tắt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Tắt Vsync</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Äá» xuất</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Báºt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>Báºt Vsync</translation> </message> @@ -3406,6 +3406,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3741,42 +3750,47 @@ Các giá trị hiện tại lần lượt là %1% và %2%.</translation> <translation>Má»™t số cà i đặt chỉ khả dụng khi game không chạy.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Add-Ons</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Hệ thống</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Äồ hoạ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Äồ hoạ nâng cao</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Âm thanh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Hồ sÆ¡ đầu và o</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Thuá»™c tÃnh</translation> </message> @@ -3880,67 +3894,67 @@ Các giá trị hiện tại lần lượt là %1% và %2%.</translation> <translation>Chá»n tên ngưá»i dùng cho ngưá»i dùng má»›i:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Nháºp tên ngưá»i dùng má»›i:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Chá»n ảnh ngưá»i dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Ảnh JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Lá»—i khi xóa ảnh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Có lá»—i khi ghi đè ảnh trước tại: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Lá»—i khi xoá táºp tin</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Không thể xóa táºp tin hiện tại: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Lá»—i khi tạo thư mục chứa ảnh ngưá»i dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Không thể tạo thư mục %1 để chứa ảnh ngưá»i dùng.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Lá»—i chép ảnh ngưá»i dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Không thể chép ảnh từ %1 sang %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Lá»—i thu phóng ảnh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Không thể thu phóng ảnh</translation> </message> @@ -3948,17 +3962,17 @@ Các giá trị hiện tại lần lượt là %1% và %2%.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Xoá ngưá»i dùng nà y? Tất cả dữ liệu save cá»§a ngưá»i dùng nà y sẽ bị xoá.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Xác nháºn xóa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Tên: %1 @@ -4112,7 +4126,7 @@ UUID: %2</translation> <translation>Lõi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Cảnh báo: "%1" không phải là ngôn ngữ hợp lệ cho khu vá»±c "%2"</translation> </message> @@ -4824,809 +4838,809 @@ Kéo Ä‘iểm để thay đổi vị trÃ, hoặc nhấp đúp chuá»™t và o ô tr <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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/'>Dữ liệu ẩn danh được thu tháºp</a>để há»— trợ cải thiện yuzu. <br/><br/>Bạn có muốn chia sẽ dữ liệu sá» dụng vá»›i chúng tôi?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Viá»…n trắc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Phát hiện cà i đặt Vulkan bị há»ng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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>Khởi tạo Vulkan thất bại trong quá trình khởi động.<br>Nhấp <br><a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>và o đây để xem hướng dẫn khắc phục vấn Ä‘á»</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Äang chạy má»™t game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Äang tải applet web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Tắt applet web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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>Tắt applet web có thể dẫn đến hà nh vi không xác định và chỉ nên được sá» dụng vá»›i Super Mario 3D All-Stars. Bạn có chắc chắn muốn tắt applet web không? (Có thể được báºt lại trong cà i đặt Gỡ lá»—i.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>Số lượng shader Ä‘ang được dá»±ng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Bá»™i số tá»· lệ độ phân giải được chá»n hiện tại.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Tốc độ giả láºp hiện tại. Giá trị cao hÆ¡n hoặc thấp hÆ¡n 100% chỉ ra giả láºp sẽ chạy nhanh hÆ¡n hoặc cháºm hÆ¡n trên máy Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Có bao nhiêu khung hình trên má»—i giây mà game Ä‘ang hiển thị. Äiá»u nà y sẽ thay đổi giữa các game và các cảnh khác nhau.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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>Thá»i gian mà giả láºp lấy từ khung hình Switch, sẽ không kể đến giá»›i hạn khung hình hoặc v-sync. Äối vá»›i tốc độ tối Ä‘a mà giả láºp nháºn được nhiá»u nhất là ở độ khoảng 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Báºt tiếng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Tắt tiếng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Äặt lại âm lượng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Xoá táºp tin gần đây</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Tiếp tục</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Tạm dừng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Cảnh báo định dạng game đã lá»—i thá»i</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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>Bạn Ä‘ang sá» dụng định dạng thư mục ROM đã giải nén cho game nà y, má»™t định dạng lá»—i thá»i đã được thay thế bởi những thứ khác như NCA, NAX, XCI, hoặc NSP. Thư mục ROM đã giải nén có thể thiếu các biểu tượng, metadata, và há»— trợ cáºp nháºt.<br><br>Äể hiểu thêm vá» các định dạng khác nhau cá»§a Switch mà yuzu há»— trợ, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>vui lòng kiểm tra wiki cá»§a chúng tôi</a>. Thông báo nà y sẽ không hiển thị lại lần sau.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Lá»—i khi nạp ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>Äịnh dạng ROM nà y không được há»— trợ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>Äã xảy ra lá»—i khi khởi tạo lõi video.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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 đã gặp lá»—i khi chạy lõi video. Äiá»u nà y thưá»ng xảy ra do phiên bản driver GPU đã cÅ©, bao gồm cả driver tÃch hợp. Vui lòng xem nháºt ký để biết thêm chi tiết. Äể biết thêm thông tin vá» cách truy cáºp nháºt ký, vui lòng xem trang sau: <a href='https://yuzu-emu.org/help/reference/log-files/'>Cách tải lên táºp tin nháºt ký</a>. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Lá»—i khi nạp ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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>Vui lòng tuân theo <a href='https://yuzu-emu.org/help/quickstart/'>hướng dẫn nhanh cá»§a yuzu</a> để trÃch xuất lại các táºp tin cá»§a bạn.<br>Bạn có thể tham khảo yuzu wiki</a> hoặc yuzu Discord</a>để được há»— trợ. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Äã xảy ra lá»—i không xác định. Hãy xem nháºt ký để biết thêm chi tiết.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Äang đóng phần má»m...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Dữ liệu save</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Dữ liệu mod</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Lá»—i khi mở thư mục %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Thư mục nà y không tồn tại!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>Lá»—i khi mở bá»™ nhá»› đệm shader chuyển được</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Thất bại khi tạo thư mục bá»™ nhá»› đệm shader cho title nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Lá»—i khi loại bá» ná»™i dung</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Lá»—i khi loại bá» bản cáºp nháºt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Lá»—i khi loại bá» DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Loại bá» ná»™i dung game đã cà i đặt?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Loại bá» bản cáºp nháºt game đã cà i đặt?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Loại bá» DLC game đã cà i đặt?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Xoá mục</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Loại bá» thà nh công</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>Loại bá» thà nh công base game đã cà i đặt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Base game không được cà i đặt trong NAND và không thể loại bá».</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>Loại bá» thà nh công bản cáºp nháºt đã cà i đặt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>Không có bản cáºp nháºt nà o được cà i đặt cho title nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>Không có DLC nà o được cà i đặt cho title nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>Loại bá» thà nh công %1 DLC đã cà i đặt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Xoá bá»™ nhá»› đệm shader OpenGL chuyển được?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Xoá bá»™ nhá»› đệm shader Vulkan chuyển được?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Xoá tất cả bá»™ nhá»› đệm shader chuyển được?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Loại bá» cấu hình game tuỳ chỉnh?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Loại bá» bá»™ nhá»› đệm?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Loại bá» táºp tin</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>Lá»—i khi loại bá» bá»™ nhá»› đệm shader chuyển được</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>Bá»™ nhá»› đệm shader cho title nà y không tồn tại.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>Thà nh công loại bá» bá»™ nhá»› đệm shader chuyển được.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>Thất bại khi xoá bá»™ nhá»› đệm shader chuyển được.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Lá»—i khi xoá bá»™ nhá»› đệm pipeline Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Thất bại khi xoá bá»™ nhá»› đệm pipeline cá»§a driver.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>Lá»—i khi loại bá» bá»™ nhá»› đệm shader chuyển được</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>Thà nh công loại bá» tất cả bá»™ nhá»› đệm shader chuyển được.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Thất bại khi loại bá» thư mục bá»™ nhá»› đệm shader.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Lá»—i khi loại bá» cấu hình tuỳ chỉnh</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>Cấu hình tuỳ chỉnh cho title nà y không tồn tại.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>Loại bá» thà nh công cấu hình game tuỳ chỉnh.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>Thất bại khi xoá cấu hình game tuỳ chỉnh.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Giải nén RomFS không thà nh công!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Äã xảy ra lá»—i khi sao chép các táºp tin RomFS hoặc ngưá»i dùng đã há»§y bá» hoạt động nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Äầy đủ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Khung</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Chá»n chế độ trÃch xuất RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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>Vui lòng chá»n cách mà bạn muốn RomFS được trÃch xuất.<br>Chế độ Äầy đủ sẽ sao chép toà n bá»™ táºp tin và o má»™t thư mục má»›i trong khi <br>chế độ Khung chỉ tạo cấu trúc thư mục.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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>Không đủ bá»™ nhá»› trống tại %1 để trÃch xuất RomFS. Hãy giải phóng bá»™ nhá»› hoặc chá»n má»™t thư mục trÃch xuất khác tại Giả láºp > Cấu hình > Hệ thống > Hệ thống táºp tin > Thư mục trÃch xuất gốc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Giải nén RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Há»§y bá»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Giải nén RomFS thà nh công!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Các hoạt động đã hoà n tất thà nh công.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>Không thể thá»±c hiện kiểm tra tÃnh toà n vẹn!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>Chưa kiểm tra sá»± hợp lệ cá»§a ná»™i dung táºp tin.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Kiểm tra tÃnh toà n vẹn thất bại!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>Ná»™i dung táºp tin có thể bị há»ng.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Äang kiểm tra tÃnh toà n vẹn...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Kiểm tra tÃnh toà n vẹn thà nh công!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Kiểm tra tÃnh toà n vẹn thất bại!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Ná»™i dung táºp tin có thể bị há»ng.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Tạo lối tắt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>Thà nh công tạo lối tắt tại %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Việc nà y sẽ tạo má»™t lối tắt tá»›i AppImage hiện tại. Äiá»u nà y có thể không hoạt động tốt nếu bạn cáºp nháºt. Tiếp tục?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Tạo biểu tượng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Không thể tạo táºp tin biểu tượng. ÄÆ°á»ng dẫn "%1" không tồn tại và không thể tạo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Lá»—i khi mở %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Chá»n thư mục</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Thuá»™c tÃnh</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>Không thể tải thuá»™c tÃnh cá»§a game.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Thá»±c thi Switch (%1);;Tất cả táºp tin (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Nạp táºp tin</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Mở thư mục ROM đã giải nén</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Danh mục đã chá»n không hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Thư mục mà bạn đã chá»n không chứa táºp tin 'main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Những táºp tin Switch cà i được (*.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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Cà i đặt táºp tin</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>%n táºp tin còn lại</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Äang cà i đặt táºp tin "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Kết quả cà i đặt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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>Äể tránh xung đột có thể xảy ra, chúng tôi không khuyến khÃch ngưá»i dùng cà i đặt base game và o NAND. Vui lòng, chỉ sá» dụng tÃnh năng nà y để cà i đặt các bản cáºp nháºt và DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n táºp tin đã được cà i đặt má»›i </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n táºp tin đã được ghi đè </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n táºp tin thất bại khi cà i đặt </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Ứng dụng hệ thống</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Bản lưu trữ cá»§a hệ thống</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Cáºp nháºt ứng dụng hệ thống</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Gói firmware (Loại A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Gói firmware (Loại B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Cáºp nháºt game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>DLC game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Title Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Chá»n cách cà i đặt NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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>Vui lòng chá»n loại title mà bạn muốn cà i đặt NCA nà y: (Trong hầu hết trưá»ng hợp, chá»n mặc định 'Game' là tốt nhất.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Cà i đặt thất bại</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Loại title mà bạn đã chá»n cho NCA không hợp lệ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Không tìm thấy táºp tin</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Không tìm thấy táºp tin "%1"</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Yêu cầu phần cứng không được đáp ứng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Hệ thống cá»§a bạn không đáp ứng yêu cầu phần cứng được đỠxuất. Báo cáo độ tương thÃch đã bị vô hiệu hoá.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Thiếu tà i khoản yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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>Äể gá»i trưá»ng hợp thá» nghiệm game tương thÃch, bạn phải liên kết tà i khoản yuzu.<br><br/>Äể liên kết tải khoản yuzu cá»§a bạn, hãy đến Giả láºp &gt; Cấu hình &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Lá»—i khi mở URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Không thể mở URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Ghi lại TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Ghi đè táºp tin cá»§a ngưá»i chÆ¡i 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Äã phát hiện cấu hình không hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Tay cầm handheld không thể được sá» dụng trong chế độ docked. Pro Controller sẽ được chá»n.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Amiibo hiện tại đã được loại bá»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Lá»—i</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>Game hiện tại không tìm kiếm amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Táºp tin Amiibo (%1);; Tất cả táºp tin (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Nạp Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Lá»—i khi nạp dữ liệu Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Táºp tin đã chá»n không phải là amiibo hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Táºp tin đã chá»n đã được sá» dụng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Äã xảy ra lá»—i không xác định</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5635,291 +5649,225 @@ Vui lòng, chỉ sá» dụng tÃnh năng nà y để cà i đặt các bản cáºp %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet tay cầm</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Chụp ảnh mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Hình ảnh PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Trạng thái TAS: Äang chạy %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Trạng thái TAS: Äang ghi %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Trạng thái TAS: Äang chá» %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Trạng thái TAS: Không hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Dừng chạy</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Bắt đầu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Dừng G&hi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>G&hi</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>Äang dá»±ng: %n shader</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Tỉ lệ thu phóng: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Tốc độ: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Tốc độ: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Game: %1 FPS (Äã mở khoá)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Game: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Khung hình: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>ÂM LƯỢNG: TẮT TIẾNG</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>ÂM LƯỢNG: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Xác nháºn chuyển hoá lại key</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Bạn Ä‘ang chuẩn bị buá»™c chuyển hoá lại toà n bá»™ keys cá»§a bạn. -Nếu bạn không biết ý nghÄ©a cá»§a Ä‘iá»u nà y hoặc bạn không hiểu Ä‘ang là m gì, -thì đây có thể là má»™t hà nh động phá hoại. -Xin hãy đảm bảo rằng đây là điá»u bạn muốn -và tạo má»™t bản sao lưu. - -Việc nà y sẽ xóa các táºp tin key tá»± động sinh ra cá»§a bạn và chạy lại mô-Ä‘un chuyển hoá key.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>Thiếu fuses</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - Thiếu BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Thiếu BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Thiếu PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Thiếu các thà nh phần chuyển hoá</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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>Keys mã hoá bị thiếu. <br>Vui lòng tuân theo <a href='https://yuzu-emu.org/help/quickstart/'>hướng dẫn nhanh cá»§a yuzu</a> để lấy tất cả key, firmware và game cá»§a bạn.<br><br><small>(%1)</small></translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Äang chuyển hoá keys... -Äiá»u nà y sẽ mất tá»›i má»™t phút tuỳ và o -hệ thống cá»§a bạn.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Äang chuyển hoá key</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Giải mã bản lưu trữ cá»§a hệ thống thất bại</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Keys mã hoá thất bại khi giải mã firmware. <br>Vui lòng tuân theo <a href='https://yuzu-emu.org/help/quickstart/'>hướng dẫn nhanh cá»§a yuzu</a>để lấy tất cả key, firmware và game cá»§a bạn. </translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Chá»n thư mục để trÃch xuất RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>Vui lòng chá»n RomFS mà bạn muốn trÃch xuất.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>Bạn có chắc chắn muốn đóng yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Bạn có chắc rằng muốn dừng giả láºp? Bất kì tiến trình nà o chưa được lưu sẽ bị mất.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6197,62 +6145,62 @@ Bạn có muốn bá» qua yêu cầu đó và thoát luôn không?</translation> <translation>Thuá»™c tÃnh</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Quét các thư mục con</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Loại bá» thư mục game</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Di chuyển lên</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Di chuyển xuống</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Mở vị trà thư mục</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Xóa</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Tên</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Äá»™ tương thÃch</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Add-ons</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Loại táºp tin</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>KÃch thước</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6323,7 +6271,7 @@ Bạn có muốn bá» qua yêu cầu đó và thoát luôn không?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Nhấp đúp chuá»™t để thêm má»™t thư mục má»›i và o danh sách game</translation> </message> @@ -6336,12 +6284,12 @@ Bạn có muốn bá» qua yêu cầu đó và thoát luôn không?</translation> <translation><numerusform>%1 trong %n kết quả</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Lá»c:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Nháºp mẫu để lá»c</translation> </message> @@ -6853,176 +6801,171 @@ Tin nhắn gỡ lá»—i:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Khởi tạo lại keys...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Thông tin vá» yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>Chế độ &cá»a sổ đơn</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Cấu &hình...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Hiển thị tiêu đỠcông cụ D&ock</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Hiện thanh &lá»c</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Hiện thanh &trạng thái</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Hiện thanh trạng thái</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Duyệt phòng game công khai</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Tạo phòng</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Rá»i phòng</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Kết nối trá»±c tiếp tá»›i phòng</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Hiện phòng hiện tại</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>T&oà n mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Khởi động lại</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Nạp/Loại bá» &Amiibo...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Báo cáo độ tương thÃch</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Mở trang &mods</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Mở &Hướng dẫn nhanh</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Mở thư mục &yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Chụp ảnh mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Cấu hình TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Cấu hình game h&iện tại...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Bắt đầu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Äặt lại</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>G&hi lại</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/vi_VN.ts b/dist/languages/vi_VN.ts index 9702b7bb8..4a8d19ae5 100644 --- a/dist/languages/vi_VN.ts +++ b/dist/languages/vi_VN.ts @@ -682,759 +682,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>RTC tuỳ chỉnh</translation> + <source>Custom RTC Date:</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>Chú ý: cái nà y có thể ghi đè khi cà i đặt quốc gia là chá»n tá»± động</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>Vùng:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>Múi giá»:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>Chế độ đầu ra âm thanh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>Hiển thị cá»a sổ chá»n ngưá»i dùng khi bắt đầu trò chÆ¡i</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>Tạm dừng giả láºp khi chạy ná»n</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>Ẩn con trá» chuá»™t khi không dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>Vô hiệu hoá applet tay cầm</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>Không nén (Chất lượng tốt nhất)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (Chất lượng thấp)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (Chất lượng trung bình)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>Null</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (Assembly Shaders, Chỉ Cho NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (Thá» nghiệm, chỉ dà nh cho Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>Trung bình</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>Khá»e</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>Tối Ä‘a</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>Tá»± động</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>Tuyệt đối</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>Tương đối</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>Paranoid (vô hiệu hoá hầu hết sá»± tối ưu)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>Cá»a sổ không viá»n</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>Toà n mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>Không Video Äầu Ra</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>Giải mã video bằng CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>Giải mã video bằng GPU (Mặc định)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [THỬ NGHIỆM]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [THỬ NGHIỆM]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>Nearest Neighbor</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>Bilinear</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>Bicubic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>ScaleForce</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ Super Resolution</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>Trống</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>Mặc định (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>Dùng 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>Dùng 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>Dung 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>Kéo dãn đến cá»a sổ phần má»m</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>Tá»± động</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>Mặc định</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>Tiếng Nháºt (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>Tiếng Anh Mỹ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>Tiếng Pháp (French)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>Tiếng Äức (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>Tiếng à (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>Tiếng Tây Ban Nha (Spanish)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>Tiếng Trung</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>Tiếng Hà n (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>Tiếng Hà Lan (Dutch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>Tiếng Bồ Äà o Nha (Portuguese)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>Tiếng Nga (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>Tiếng Äà i Loan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>Tiếng Anh UK (British English)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>Tiếng Pháp Canada</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>Tiếng Mỹ La-tinh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>Tiếng Trung giản thể</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>Tiếng Trung phồn thể (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>Tiếng Bồ Äà o Nha cá»§a ngưá»i Brazil (Português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>Nháºt Bản</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>Hoa Kỳ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>Châu Âu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>Châu Úc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>Trung Quốc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>Hà n Quốc</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>Äà i Loan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>Tá»± động (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>Mặc định (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>CET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>Cuba</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>Ai Cáºp</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>EST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>GB-Eire</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>Greenwich</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>Hồng Kông</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>HST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>Iceland</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>Iran</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>Israel</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>Jamaica</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>Kwajalein</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>Libya</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>MET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>MST</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>Navajo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>NZ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>NZ-CHAT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>Ba Lan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>Bồ Äà o Nha</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>PRC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>PST8PDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>ROC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>ROK</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>Singapore</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>Thổ NhÄ© Kỳ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>Quốc tế</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>W-SU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>WET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>Zulu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>Stereo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>Chế độ cắm TV</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>Cầm tay</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation type="unfinished"/> </message> @@ -2314,33 +2314,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>Mà u ná»n:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>Tắt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>Tắt Vsync</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>Äá» xuất</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>Báºt</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>Báºt Vsync</translation> </message> @@ -3406,6 +3406,15 @@ Nếu muốn đảo ngược hướng cần Ä‘iá»u khiển, di chuyển cần s </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3741,42 +3750,47 @@ Các giá trị hiện tại lần lượt là %1% và %2%.</translation> <translation>Má»™t số cà i đặt chỉ khả dụng khi game không chạy.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>Bổ Sung</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>Hệ Thống</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>Äồ Há»a</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>Äồ Há»a Nâng Cao</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>Âm Thanh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>Hồ sÆ¡ đầu và o</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>Thuá»™c tÃnh</translation> </message> @@ -3880,67 +3894,67 @@ Các giá trị hiện tại lần lượt là %1% và %2%.</translation> <translation>Chá»n tên cho ngưá»i dùng má»›i</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>Chá»n má»™t tên má»›i:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>Chá»n Ảnh cho Ngưá»i Dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>Ảnh JPEG (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>Lá»—i khi xóa ảnh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>Có lá»—i khi ghi đè ảnh trước tại: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>Lá»—i xóa ảnh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>Không thể xóa ảnh hiện tại: %1.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>Lá»—i khi tạo thư mục chứa ảnh ngưá»i dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>Không thể tạo thư mục %1 để chứa ảnh ngưá»i dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>Lá»—i chép ảnh ngưá»i dùng</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>Không thể chép ảnh từ %1 sang %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>Lá»—i thu phóng ảnh</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>Không thể thu phóng ảnh</translation> </message> @@ -3948,17 +3962,17 @@ Các giá trị hiện tại lần lượt là %1% và %2%.</translation> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>Xoá ngưá»i dùng nà y? Tất cả dữ liệu save cá»§a ngưá»i dùng nà y sẽ bị xoá.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>Xác nháºn xóa</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>Tên: %1 @@ -4112,7 +4126,7 @@ UUID: %2</translation> <translation>Lõi</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Cảnh báo: "%1" không phải là ngôn ngữ hợp lệ cho khu vá»±c "%2"</translation> </message> @@ -4824,809 +4838,809 @@ Kéo Ä‘iểm để thay đổi vị trÃ, hoặc nhấp đúp chuá»™t và o ô tr <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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/'>Dữ liệu ẩn danh được thu tháºp</a>để há»— trợ cải thiện yuzu. <br/><br/>Bạn có muốn chia sẽ dữ liệu sá» dụng cho chúng tôi?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>Viá»…n trắc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>Phát hiện cà i đặt Vulkan bị há»ng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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>Khởi tạo Vulkan thất bại trong quá trình khởi động.<br>Nhấn <br><a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>và o đây để xem hướng dẫn khắc phục vấn Ä‘á»</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>Äang chạy má»™t game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>Äang tải applet web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>Tắt applet web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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>Tắt applet web có thể dẫn đến hà nh vi không xác định và chỉ nên được sá» dụng vá»›i Super Mario 3D All-Stars. Bạn có chắc chắn muốn tắt applet web không? (Có thể được báºt lại trong cà i đặt Gỡ lá»—i.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>Số lượng shader Ä‘ang được dá»±ng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>Bá»™i số tá»· lệ độ phân giải được chá»n hiện tại.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Tốc độ giả láºp hiện tại. Giá trị cao hÆ¡n hoặc thấp hÆ¡n 100% chỉ ra giả láºp sẽ chạy nhanh hÆ¡n hoặc cháºm hÆ¡n trên máy Switch</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Có bao nhiêu khung hình trên má»—i giây mà trò chÆ¡i Ä‘ang hiển thị. Äiá»u nà y sẽ thay đổi từ trò chÆ¡i nà y đến trò chÆ¡i kia và khung cảnh nà y đến khung cảnh kia.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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>Thá»i gian mà giả láºp lấy từ khung hình Switch, sẽ không kể đến giá»›i hạn khung hình hoặc v-sync. Äối vá»›i tốc độ tối Ä‘a mà giả láºp nháºn được nhiá»u nhất là ở độ khoảng 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>Báºt tiếng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>Tắt tiếng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>Äặt lại âm lượng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>&Xoá táºp tin gần đây</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>&Tiếp tục</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&Tạm dừng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>Chú ý định dạng trò chÆ¡i đã lá»—i thá»i</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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>Bạn Ä‘ang sá» dụng định dạng danh mục ROM giải mã cho trò chÆ¡i nà y, và đó là má»™t định dạng lá»—i thá»i đã được thay thế bởi những thứ khác như NCA, NAX, XCI, hoặc NSP. Danh mục ROM giải mã có thể thiếu biểu tượng, metadata, và há»— trợ cáºp nháºt.<br><br>Äể giải thÃch vá» các định dạng khác nhau cá»§a Switch mà yuzu há»— trợ, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>vui lòng kiểm tra trên wiki cá»§a chúng tôi</a>. Thông báo nà y sẽ không hiển thị lại lần sau.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>Xảy ra lá»—i khi Ä‘ang nạp ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>Äịnh dạng ROM nà y không há»— trợ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>Äã xảy ra lá»—i khi khởi tạo lõi video.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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 đã gặp lá»—i khi chạy lõi video. Äiá»u nà y thưá»ng xảy ra do phiên bản driver GPU đã cÅ©, bao gồm cả driver tÃch hợp. Vui lòng xem nháºt ký để biết thêm chi tiết. Äể biết thêm thông tin vá» cách truy cáºp nháºt ký, vui lòng xem trang sau: <a href='https://yuzu-emu.org/help/reference/log-files/'>Cách tải lên táºp tin nháºt ký</a>. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Lá»—i xảy ra khi nạp ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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>Vui lòng tuân theo <a href='https://yuzu-emu.org/help/quickstart/'>hướng dẫn nhanh cá»§a yuzu</a> để trÃch xuất lại các tệp cá»§a bạn.<br>Bạn có thể tham khảo yuzu wiki</a> hoặc yuzu Discord</a>để được há»— trợ. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Äã xảy ra lá»—i không xác định. Vui lòng kiểm tra sổ ghi chép để biết thêm chi tiết.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>Äang đóng phần má»m...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>Dữ liệu save</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Dữ liệu mod</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>Xảy ra lá»—i khi mở %1 thư mục</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>Thư mục nà y không tồn tại!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>Lá»—i khi mở bá»™ nhá»› cache shader có thể chuyển.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Thất bại khi tạo thư mục bá»™ nhá»› cache shader cho title nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>Lá»—i khi loại bá» ná»™i dung</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>Lá»—i khi loại bá» cáºp nháºt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>Lá»—i khi loại bá» DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>Loại bá» ná»™i dung game đã cà i đặt?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>Loại bá» bản cáºp nháºt game đã cà i đặt?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>Loại bá» DLC game đã cà i đặt?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>Xoá mục</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>Loại bá» thà nh công</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>Loại bá» thà nh công base game đã cà i đặt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Base game không được cà i đặt trong NAND và không thể loại bá».</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>Loại bá» thà nh công bản cáºp nháºt đã cà i đặt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>Không có bản cáºp nháºt nà o được cà i đặt cho title nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>Không có DLC nà o được cà i đặt cho title nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>Loại bá» thà nh công %1 DLC đã cà i đặt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Xoá bá»™ nhá»› cache shader OpenGL chuyển được?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Xoá bá»™ nhá»› cache shader Vulkan chuyển được?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>Xoá tất cả bá»™ nhá»› cache shader chuyển được?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>Loại bá» cấu hình game tuỳ chỉnh?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>Xoá bá»™ nhá»› cache?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>Xoá táºp tin</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>Lá»—i khi xoá bá»™ nhá»› cache shader chuyển được</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>Bá»™ nhá»› cache shader cho title nà y không tồn tại.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>Thà nh công loại bá» bá»™ nhá»› cache shader chuyển được</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>Thất bại khi xoá bá»™ nhá»› cache shader chuyển được.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Lá»—i khi xoá bá»™ nhá»› cache pipeline Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Thất bại khi xoá bá»™ nhá»› cache pipeline cá»§a driver.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>Lá»—i khi loại bá» bá»™ nhá»› cache shader chuyển được</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>Thà nh công loại bá» tât cả bá»™ nhá»› cache shader chuyển được.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Thất bại khi loại bá» thư mục bá»™ nhá»› cache shader.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>Lá»—i khi loại bá» cấu hình tuỳ chỉnh</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>Cấu hình tuỳ chỉnh cho title nà y không tồn tại.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>Loại bá» thà nh công cấu hình game tuỳ chỉnh.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>Thất bại khi xoá cấu hình game tuỳ chỉnh</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>Khai thác RomFS không thà nh công!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Äã xảy ra lá»—i khi sao chép tệp tin RomFS hoặc ngưá»i dùng đã há»§y bá» hoạt động nà y.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>Äầy</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>Sưá»n</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>Chá»n chế độ kết xuất RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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>Vui lòng chá»n RomFS mà bạn muốn kết xuất như thế nà o.<br>Äầy đủ sẽ sao chép toà n bá»™ tệp tin và o má»™t danh mục má»›i trong khi <br>bá»™ xương chỉ tạo kết cấu danh mục.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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>Không đủ bá»™ nhá»› trống tại %1 để trÃch xuất RomFS. Hãy giải phóng bá»™ nhá»› hoặc chá»n má»™t thư mục trÃch xuất khác tại Giả láºp > Thiết láºp > Hệ thống > Hệ thống tệp > Thư mục trÃch xuất gốc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>Khai thác RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>Há»§y bá»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>Khai thác RomFS thà nh công!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>Các hoạt động đã hoà n tất thà nh công.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>Không thể thá»±c hiện kiểm tra tÃnh toà n vẹn!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>Chưa kiểm tra sá»± hợp lệ cá»§a ná»™i dung táºp tin.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>Kiểm tra tÃnh toà n vẹn thất bại!</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>Ná»™i dung táºp tin có thể bị há»ng.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>Äang kiểm tra tÃnh toà n vẹn...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>Kiểm tra tÃnh toà n vẹn thà nh công!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>Kiểm tra tÃnh toà n vẹn thất bại!</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>Ná»™i dung táºp tin có thể bị há»ng.</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>Tạo lối tắt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>Thà nh công tạo lối tắt tại %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Việc nà y sẽ tạo má»™t lối tắt tá»›i AppImage hiện tại. Äiá»u nà y có thể không hoạt động tốt nếu bạn cáºp nháºt. Tiếp tục?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>Tạo icon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Không thể tạo táºp tin icon. ÄÆ°á»ng dẫn "%1" không tồn tại và không thể tạo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>Lá»—i khi mở %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>Chá»n danh mục</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>Thuá»™c tÃnh</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>Thuá»™c tÃnh cá»§a trò chÆ¡i không thể nạp được.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Thá»±c thi Switch (%1);;Tất cả tệp tin (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>Nạp tệp tin</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>Mở danh mục ROM đã trÃch xuất</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>Danh mục đã chá»n không hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Danh mục mà bạn đã chá»n không có chứa tệp tin 'main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Những tệp tin Switch cà i được (*.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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>Cà i đặt táºp tin</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>%n táºp tin còn lại</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>Äang cà i đặt tệp tin "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>Kết quả cà i đặt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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>Äể tránh xung đột có thể xảy ra, chúng tôi không khuyến khÃch ngưá»i dùng cà i base games và o NAND. Vui lòng, chỉ sá» dụng tÃnh năng nà y để cà i các bản cáºp nháºt và DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n đã được cà i đặt má»›i </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n táºp tin đã được ghi đè </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n táºp tin thất bại khi cà i đặt </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>Ứng dụng hệ thống</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>Hệ thống lưu trữ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>Cáºp nháºt hệ thống ứng dụng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>Gói phần má»m (Loại A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>Gói phần má»m (Loại B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>Trò chÆ¡i</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>Cáºp nháºt trò chÆ¡i</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>Ná»™i dung trò chÆ¡i có thể tải xuống</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Tiêu đỠDelta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>Chá»n loại NCA để cà i đặt...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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>Vui lòng chá»n loại tiêu đỠmà bạn muốn cà i đặt NCA nà y: (Trong hầu hết trưá»ng hợp, chá»n mặc định 'Game' là tốt nhất.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>Cà i đặt đã không thà nh công</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Loại tiêu đỠNCA mà bạn chá»n nó không hợp lệ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>Không tìm thấy tệp tin</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>Không tìm thấy "%1" tệp tin</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>Yêu cầu phần cứng không được đáp ứng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Hệ thống cá»§a bạn không đáp ứng yêu cầu phần cứng được đỠxuất. Báo cáo tương thÃch đã được tắt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>Thiếu tà i khoản yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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>Äể gá»i trưá»ng hợp thá» nghiệm trò chÆ¡i tương thÃch, bạn phải liên kết tà i khoản yuzu.<br><br/>Äể liên kết tải khoản yuzu cá»§a bạn, hãy đến Giả láºp &gt; Thiết láºp &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>Lá»—i khi mở URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>Không thể mở URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>Ghi lại TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>Ghi đè táºp tin cá»§a ngưá»i chÆ¡i 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>Äã phát hiện cấu hình không hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Tay cầm handheld không thể được sá» dụng trong chế độ docked. Pro Controller sẽ được chá»n.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>Amiibo hiện tại đã bị loại bá»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>Lá»—i</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>Game hiện tại không tìm kiếm amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Tệp tin Amiibo (%1);; Tất cả tệp tin (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>Nạp dữ liệu Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>Xảy ra lá»—i khi nạp dữ liệu Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>Táºp tin đã chá»n không phải là amiibo hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>Táºp tin đã chá»n đã được sá» dụng</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>Äã xảy ra lá»—i không xác định</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5635,291 +5649,225 @@ Vui lòng, chỉ sá» dụng tÃnh năng nà y để cà i các bản cáºp nháºt %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>Applet tay cầm</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>Chụp ảnh mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>Hình ảnh PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>Trạng thái TAS: Äang chạy %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>Trạng thái TAS: Äang ghi %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>Trạng thái TAS: Äang chá» %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>Trạng thái TAS: Không hợp lệ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&Dừng chạy</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>&Bắt đầu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>Dừng G&hi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>G&hi</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>Äang dá»±ng: %n shader(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Tỉ lệ thu phóng: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>Tốc độ: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>Tốc độ: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Game: %1 FPS (Äã mở khoá)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>Trò chÆ¡i: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>Khung hình: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>ÂM LƯỢNG: TẮT TIẾNG</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>ÂM LƯỢNG: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>Xác nháºn mã khóa Rederivation</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>Bạn Ä‘ang muốn bắt buá»™c là m lại trÃch dẫn toà n bá»™ mã khóa cá»§a bạn. -Nếu bạn không biết cái nà y là gì hay bạn Ä‘ang là m gì, -đây là hà nh động có khả năng phá hoại. -Hãy chắc rằng đây là điá»u bạn muốn -và phải tạo ra má»™t bản sao lưu lại. - -Äiá»u nà y sẽ xóa mã khóa tá»± động tạo trên tệp tin cá»§a bạn và chạy lại mô-Ä‘un mã khóa derivation.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>Thiếu fuses</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation> - Thiếu BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - Thiếu BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation> - Thiếu PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>Thiếu các thà nh phần chuyển hoá</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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>Keys mã hoá bị thiếu. <br>Vui lòng tuân theo <a href='https://yuzu-emu.org/help/quickstart/'>hướng dẫn nhanh cá»§a yuzu</a> để lấy tất cả keys, firmware và games cá»§a bạn.<br><br><small>(%1)</small></translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>Mã khóa xuất phát... -Äiá»u nà y có thể mất hÆ¡n và i phút tùy thuá»™c -và o hiệu suất hệ thống cá»§a bạn.</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>Mã khóa xuất phát</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>Giải mã bản lưu trữ cá»§a hệ thống thất bại</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>Keys mã hoá thấy bại khi giải mã firmware. <br>Vui lòng tuân theo <a href='https://yuzu-emu.org/help/quickstart/'>hướng dẫn nhanh cá»§a yuzu</a>để lấy tất cả keys, firmware và games cá»§a bạn. </translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>Chá»n thư mục để sao chép RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>Vui lòng chá»n RomFS mà bạn muốn sao chép.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>Bạn có chắc chắn muốn đóng yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Bạn có chắc rằng muốn dừng giả láºp? Bất kì tiến trình nà o chưa được lưu sẽ bị mất.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6197,62 +6145,62 @@ Bạn có muốn bá» qua yêu cầu đó và thoát luôn không?</translation> <translation>Thuá»™c tÃnh</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>Quét các thư mục con</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>Loại bá» thư mục game</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² Di chuyển lên</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ Di chuyển xuống</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>Mở vị trà thư mục</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>Bá» trống</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>Tên</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>Tương thÃch</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>Tiện Ãch ngoà i</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>Loại tệp tin</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>KÃch cỡ</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation type="unfinished"/> </message> @@ -6323,7 +6271,7 @@ Bạn có muốn bá» qua yêu cầu đó và thoát luôn không?</translation> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>Nháy đúp chuá»™t để thêm má»™t thư mục má»›i và o danh sách trò chÆ¡i game</translation> </message> @@ -6336,12 +6284,12 @@ Bạn có muốn bá» qua yêu cầu đó và thoát luôn không?</translation> <translation><numerusform>%1 trong %n kết quả</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>Bá»™ lá»c:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>Nháºp khuôn để lá»c</translation> </message> @@ -6853,176 +6801,171 @@ Tin nhắn gỡ lá»—i:</translation> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>&Khởi tạo lại keys...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>&Thông tin vá» yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>&Chế độ cá»a sổ đơn</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>Cấu& hình</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>Hiển thị tiêu đỠcông cụ D&ock</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>Hiện thanh &lá»c</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>Hiện thanh &trạng thái</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>Hiển thị thanh trạng thái</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>&Duyệt phòng game công khai</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>&Tạo phòng</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>&Rá»i phòng</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>&Kết nối trá»±c tiếp tá»›i phòng</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>&Hiện phòng hiện tại</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>T&oà n mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>&Khởi động lại</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>Tải/Loại bá» &Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>&Báo cáo tương thÃch</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>Mở trang &mods</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>Mở &Hướng dẫn nhanh</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>&FAQ</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>Mở thư mục &yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>&Chụp ảnh mà n hình</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>&Cấu hình TAS...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>Cấu hình game hiện tại...</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>&Bắt đầu</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>&Äặt lại</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>G&hi</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/zh_CN.ts b/dist/languages/zh_CN.ts index d8cb70988..89ac3bce4 100644 --- a/dist/languages/zh_CN.ts +++ b/dist/languages/zh_CN.ts @@ -684,759 +684,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>自定义系统时间</translation> + <source>Custom RTC Date:</source> + <translation>自定义系统时间:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>è¯è¨€ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>注æ„:当“地区â€è®¾ç½®æ˜¯â€œè‡ªåŠ¨é€‰æ‹©â€æ—¶ï¼Œæ¤è®¾ç½®å¯èƒ½ä¼šè¢«è¦†ç›–。</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>地区:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>时区:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>声音输出模å¼ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>æŽ§åˆ¶å°æ¨¡å¼ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>游æˆå¯åŠ¨æ—¶æç¤ºé€‰æ‹©ç”¨æˆ·</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>模拟器ä½äºŽåŽå°æ—¶æš‚åœæ¨¡æ‹Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>åœæ¢æ¨¡æ‹Ÿæ—¶éœ€è¦ç¡®è®¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>自动éšè—é¼ æ ‡å…‰æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>ç¦ç”¨æŽ§åˆ¶å™¨å°ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>å¯ç”¨æ¸¸æˆæ¨¡å¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU å¼‚æ¥æ¨¡æ‹Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>ä¸åŽ‹ç¼© (最高质é‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (低质é‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (ä¸ç‰è´¨é‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>æ— </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM (汇编ç€è‰²å™¨ï¼Œä»…é™ NVIDIA 显å¡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (å®žéªŒæ€§ï¼Œä»…é™ Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (å®žéªŒæ€§ï¼Œä»…é™ AMD/Mesa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>æ£å¸¸</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>高</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>æžé«˜</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>自动</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>高精度</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>低精度</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>忉§æ¨¡å¼ (ç¦ç”¨ç»å¤§å¤šæ•°ä¼˜åŒ–项)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>动æ€ç¼–译</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>æœ¬æœºä»£ç æ‰§è¡Œ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>æ— è¾¹æ¡†çª—å£</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>独å å…¨å±</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>æ— è§†é¢‘è¾“å‡º</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU 视频解ç </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU 视频解ç (默认)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [实验性]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [实验性]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [实验性]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>è¿‘é‚»å–æ ·</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>åŒçº¿æ€§è¿‡æ»¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>åŒä¸‰çº¿è¿‡æ»¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>高斯模糊</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>强制缩放</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ è¶…çº§åˆ†è¾¨çŽ‡é”画技术</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>æ— </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>快速近似抗锯齿</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>ååƒç´ å½¢æ€å¦æŠ—锯齿</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>默认 (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>强制 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>强制 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>强制 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>拉伸窗å£</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>自动</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>系统默认</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>æ—¥è¯ (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>美å¼è‹±è¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>æ³•è¯ (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>å¾·è¯ (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>æ„å¤§åˆ©è¯ (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>西çç‰™è¯ (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>䏿–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>éŸ©è¯ (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>è·å…°è¯ (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>è‘¡è„ç‰™è¯ (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>ä¿„è¯ (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>å°æ¹¾ä¸æ–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>英å¼è‹±è¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>åŠ æ‹¿å¤§æ³•è¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>拉美西ç牙è¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>ç®€ä½“ä¸æ–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>ç¹ä½“䏿–‡ (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>巴西-è‘¡è„ç‰™è¯ (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>日本</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>美国</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>欧洲</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>澳大利亚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>ä¸å›½</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>韩国</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>ä¸å›½å°æ¹¾</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>自动 (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>默认 (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>欧洲ä¸éƒ¨æ—¶é—´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>å¤å·´æ ‡å‡†æ—¶é—´&å¤å·´å¤ä»¤æ—¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>å¤å·´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>东欧时间</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>埃åŠ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>爱尔兰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>ä¸œéƒ¨æ ‡å‡†æ—¶é—´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>ä¸œéƒ¨æ ‡å‡†æ—¶é—´&东部å¤ä»¤æ—¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>英国</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>英国-爱尔兰时间</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>æ ¼æž—å¨æ²»æ ‡å‡†æ—¶é—´ (GMT)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>æ ¼æž—å¨æ²»</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>ä¸å›½é¦™æ¸¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>美国å¤å¨å¤·æ—¶é—´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>冰岛</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>伊朗</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>以色列</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>ç‰™ä¹°åŠ </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>夸贾林环ç¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>利比亚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>䏿¬§æ—¶é—´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>å±±åŒºæ ‡å‡†æ—¶é—´ (北美)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>å±±åŒºæ ‡å‡†æ—¶é—´&山区å¤ä»¤æ—¶ (北美)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>纳瓦éœ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>新西兰时间</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>新西兰-查塔姆群岛</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>波兰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>è‘¡è„牙</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>ä¸å›½æ ‡å‡†æ—¶é—´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>å¤ªå¹³æ´‹æ ‡å‡†æ—¶é—´&太平洋å¤ä»¤æ—¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>å°æ¹¾æ—¶é—´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>韩国时间</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>æ–°åŠ å¡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>土耳其</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>世界时间</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>å调世界时</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>欧洲-莫斯科时间</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>西欧时间</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>祖é²</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>å•声é“</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>立体声</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>环绕声</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (默认)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (ä¸å®‰å…¨)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (ä¸å®‰å…¨)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>主机模å¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>掌机模å¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>总是询问 (默认)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>仅当游æˆä¸å¸Œæœ›åœæ¢æ—¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>从ä¸è¯¢é—®</translation> </message> @@ -2315,33 +2315,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>背景颜色:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>å…³é—</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>åž‚ç›´åŒæ¥å…³</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>推è</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>å¼€å¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>åž‚ç›´åŒæ¥å¼€</translation> </message> @@ -3407,6 +3407,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3742,42 +3751,47 @@ Current values are %1% and %2% respectively.</source> <translation>åªæœ‰å½“游æˆä¸åœ¨è¿è¡Œæ—¶ï¼ŒæŸäº›è®¾ç½®é¡¹æ‰å¯ç”¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>é™„åŠ é¡¹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>系统</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>图形</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>高级图形</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>声音</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>输入é…置文件</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>属性</translation> </message> @@ -3881,67 +3895,67 @@ Current values are %1% and %2% respectively.</source> <translation>输入新用户的用户å:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>输入新的用户å:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>选择用户图åƒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG å›¾åƒ (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>åˆ é™¤å›¾åƒæ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>å°è¯•è¦†ç›–è¯¥ç”¨æˆ·çš„çŽ°æœ‰å›¾åƒæ—¶å‡ºé”™: %1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>åˆ é™¤æ–‡ä»¶æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>æ— æ³•åˆ é™¤æ–‡ä»¶: %1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>创建用户图åƒç›®å½•时出错</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>æ— æ³•åˆ›å»ºå˜å‚¨ç”¨æˆ·å›¾åƒçš„目录 %1 。</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>å¤åˆ¶ç”¨æˆ·å›¾åƒæ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>æ— æ³•å°†å›¾åƒä»Ž %1 å¤åˆ¶åˆ° %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>调整用户图åƒå¤§å°æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>æ— æ³•è°ƒæ•´å›¾åƒçš„大å°</translation> </message> @@ -3949,17 +3963,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>åˆ é™¤æ¤ç”¨æˆ·ï¼Ÿæ¤ç”¨æˆ·ä¿å˜çš„æ‰€æœ‰æ•°æ®éƒ½å°†è¢«åˆ 除。</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>ç¡®è®¤åˆ é™¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>åç§°: %1 @@ -4113,7 +4127,7 @@ UUID: %2</translation> <translation>æ ¸å¿ƒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4825,809 +4839,809 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>使用数æ®å…±äº«</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>检测到 Vulkan 的安装已æŸå</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>æ¸¸æˆæ£åœ¨è¿è¡Œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>æ£åœ¨åŠ è½½ Web å°ç¨‹åº...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>ç¦ç”¨ Web å°ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>当剿£åœ¨æž„建的ç€è‰²å™¨æ•°é‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>当å‰é€‰å®šçš„分辨率缩放比例。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>å–æ¶ˆé™éŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>é™éŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>é‡ç½®éŸ³é‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>清除最近文件 (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>ç»§ç» (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>æš‚åœ (&P)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>è¿‡æ—¶æ¸¸æˆæ ¼å¼è¦å‘Š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>åŠ è½½ ROM 时出错ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>该 ROM æ ¼å¼ä¸å—支æŒã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>åˆå§‹åŒ–è§†é¢‘æ ¸å¿ƒæ—¶å‘生错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>å‘生了未知错误。请查看日志了解详情。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>æ£åœ¨å…³é—…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>ä¿å˜æ•°æ®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>Mod æ•°æ®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>打开 %1 文件夹时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>文件夹ä¸å˜åœ¨ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>打开å¯è½¬ç§»ç€è‰²å™¨ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>为该游æˆåˆ›å»ºç€è‰²å™¨ç¼“å˜ç›®å½•时失败。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>åˆ é™¤å†…å®¹æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>åˆ é™¤æ›´æ–°æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>åˆ é™¤ DLC 时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆå†…容?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆæ›´æ–°ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆ DLC 内容?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>åˆ é™¤é¡¹ç›®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>åˆ é™¤æˆåŠŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>æˆåŠŸåˆ é™¤å·²å®‰è£…çš„æ¸¸æˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>æˆåŠŸåˆ é™¤å·²å®‰è£…çš„æ¸¸æˆæ›´æ–°ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>è¿™ä¸ªæ¸¸æˆæ²¡æœ‰ä»»ä½•已安装的更新。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>è¿™ä¸ªæ¸¸æˆæ²¡æœ‰ä»»ä½•已安装的 DLC 。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>æˆåŠŸåˆ é™¤æ¸¸æˆ %1 安装的 DLC 。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>åˆ é™¤ OpenGL 模å¼çš„ç€è‰²å™¨ç¼“å˜ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>åˆ é™¤ Vulkan 模å¼çš„ç€è‰²å™¨ç¼“å˜ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>åˆ é™¤æ‰€æœ‰çš„ç€è‰²å™¨ç¼“å˜ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>移除自定义游æˆè®¾ç½®ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>移除缓å˜ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>åˆ é™¤æ–‡ä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>清除游玩时间</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>é‡ç½®æ¸¸çŽ©æ—¶é—´ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>这个游æˆçš„ç€è‰²å™¨ç¼“å˜ä¸å˜åœ¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>æˆåŠŸåˆ é™¤ç€è‰²å™¨ç¼“å˜ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜å¤±è´¥ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>åˆ é™¤ Vulkan 驱动程åºç®¡çº¿ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>åˆ é™¤é©±åŠ¨ç¨‹åºç®¡çº¿ç¼“å˜å¤±è´¥ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>ç€è‰²å™¨ç¼“å˜åˆ 除æˆåŠŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜ç›®å½•失败。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>移除自定义游æˆè®¾ç½®æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>这个游æˆçš„自定义设置ä¸å˜åœ¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>æˆåŠŸç§»é™¤è‡ªå®šä¹‰æ¸¸æˆè®¾ç½®ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>移除自定义游æˆè®¾ç½®å¤±è´¥ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS æå–失败ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>完整</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>框架</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>选择 RomFS 转储模å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>æ£åœ¨æå– RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS æå–æˆåŠŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>æ“作æˆåŠŸå®Œæˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>æ— æ³•æ‰§è¡Œå®Œæ•´æ€§éªŒè¯ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>未检查文件的完整性。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>完整性验è¯å¤±è´¥ï¼</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>文件å¯èƒ½å·²ç»æŸå。</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>æ£åœ¨éªŒè¯å®Œæ•´æ€§...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>å®Œæ•´æ€§éªŒè¯æˆåŠŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>完整性验è¯å¤±è´¥ï¼</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>文件å¯èƒ½å·²ç»æŸå。</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>åˆ›å»ºå¿«æ·æ–¹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>æ‚¨æƒ³ä»¥å…¨å±æ¨¡å¼å¯åŠ¨æ¸¸æˆå—?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>%1 çš„å¿«æ·æ–¹å¼åˆ›å»ºæˆåŠŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>%1 çš„å¿«æ·æ–¹å¼åˆ›å»ºå¤±è´¥</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>åˆ›å»ºå›¾æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>打开 %1 时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>选择目录</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>属性</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>æ— æ³•åŠ è½½è¯¥æ¸¸æˆçš„属性信æ¯ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>åŠ è½½æ–‡ä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>打开æå–çš„ ROM 目录</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>é€‰æ‹©çš„ç›®å½•æ— æ•ˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>安装文件</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>剩余 %n 个文件</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>æ£åœ¨å®‰è£…文件 "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>安装结果</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>最近安装了 %n 个文件 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n 个文件被覆盖 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n 个文件安装失败 </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>系统应用</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>系统档案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>系统应用更新</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>固件包 (Aåž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>固件包 (Båž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>游æˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>æ¸¸æˆæ›´æ–°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>æ¸¸æˆ DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>å·®é‡ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>选择 NCA 安装类型...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>安装失败</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>选择的 NCA 程åºç±»åž‹æ— 效。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>找ä¸åˆ°æ–‡ä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>文件 "%1" 未找到</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>确定</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>ç¡¬ä»¶ä¸æ»¡è¶³è¦æ±‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>未设置 yuzu 账户</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>打开 URL 时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>æ— æ³•æ‰“å¼€ URL : "%1" 。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS 录制ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>覆盖玩家 1 的文件?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>æ£€æµ‹åˆ°æ— æ•ˆé…ç½®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>当å‰çš„ Amiibo 已被移除。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>当剿¸¸æˆå¹¶æ²¡æœ‰åœ¨å¯»æ‰¾ Amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo 文件 (%1);; 全部文件 (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>åŠ è½½ Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>åŠ è½½ Amiibo æ•°æ®æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>é€‰æ‹©çš„æ–‡ä»¶å¹¶ä¸æ˜¯æœ‰æ•ˆçš„ amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>选择的文件已在使用ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>å‘生了未知错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5636,290 +5650,225 @@ Please, only use this feature to install updates and DLC.</source> %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>æ— å¯ç”¨å›ºä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>请安装固件以使用相册å°ç¨‹åºã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>相册å°ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>相册å°ç¨‹åºä¸å¯ç”¨ã€‚è¯·é‡æ–°å®‰è£…固件。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>请安装固件以使用 Cabinet å°ç¨‹åºã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Cabinet å°ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>Cabinet å°ç¨‹åºä¸å¯ç”¨ã€‚è¯·é‡æ–°å®‰è£…固件。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>请安装固件以使用 Mii editor。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Mii Edit å°ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>Mii editor ä¸å¯ç”¨ã€‚è¯·é‡æ–°å®‰è£…固件。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>请安装固件以使用控制器èœå•。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>控制器å°ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>控制器èœå•ä¸å¯ç”¨ã€‚è¯·é‡æ–°å®‰è£…固件。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>æ•获截图</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG å›¾åƒ (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS 状æ€ï¼šæ£åœ¨è¿è¡Œ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS 状æ€ï¼šæ£åœ¨å½•制 %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS 状æ€ï¼šç©ºé—² %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS 状æ€ï¼šæ— 效</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>åœæ¢è¿è¡Œ (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>开始 (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>åœæ¢å½•制 (&E)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>录制 (&E)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>æ£åœ¨ç¼–译 %n 个ç€è‰²å™¨æ–‡ä»¶</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>缩放比例: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>速度: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>速度: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>FPS: %1 (未é”定)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>FPS: %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>帧延迟: %1 毫秒</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>抗锯齿关</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>音é‡: é™éŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>音é‡: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>ç¡®è®¤é‡æ–°ç”Ÿæˆå¯†é’¥</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>å³å°†å¼ºåˆ¶é‡æ–°ç”Ÿæˆæ‚¨çš„全部密钥。 -å¦‚æžœæ‚¨ä¸æ¸…楚这æ„味ç€ä»€ä¹ˆï¼Œæˆ–您在åšä»€ä¹ˆï¼Œ -è¿™å¯èƒ½å…·æœ‰ç ´åæ€§åŽæžœã€‚ -è¯·ç¡®ä¿æ‚¨å¸Œæœ›è¿™æ ·åšï¼Œå¹¶ä¸”åšå¥½å¤‡ä»½ã€‚ - -è¿™å°†åˆ é™¤æ‚¨è‡ªåŠ¨ç”Ÿæˆçš„å¯†é’¥æ–‡ä»¶å¹¶é‡æ–°è¿è¡Œå¯†é’¥ç”Ÿæˆæ¨¡å—。</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>项目丢失</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- 丢失 BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - 丢失 BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- 丢失 PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>组件丢失</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>æ£åœ¨ç”Ÿæˆå¯†é’¥... -è¿™å¯èƒ½éœ€è¦æœ€å¤šä¸€åˆ†é’Ÿï¼Œå…·ä½“å–决于 -您的系统性能。</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation>密钥缺失。<br>请查看<a href='https://yuzu-emu.org/help/quickstart/'>yuzu 快速导航</a>ä»¥èŽ·å¾—ä½ çš„å¯†é’¥ã€å›ºä»¶å’Œæ¸¸æˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>生æˆå¯†é’¥</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>系统固件解密失败</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>当å‰å¯†é’¥æ— 法解密系统固件。<br>请查看<a href='https://yuzu-emu.org/help/quickstart/'>yuzu 快速导航</a>ä»¥èŽ·å¾—ä½ çš„å¯†é’¥ã€å›ºä»¶å’Œæ¸¸æˆã€‚</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>选择 RomFS è½¬å‚¨ç›®æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>请选择希望转储的 RomFS。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>您确定è¦å…³é— yuzu å—?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6197,62 +6146,62 @@ Would you like to bypass this and exit anyway?</source> <translation>属性</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>扫æå文件夹</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>移除游æˆç›®å½•</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² å‘上移动</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ å‘下移动</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>打开目录ä½ç½®</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>清除</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>åç§°</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>兼容性</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>é™„åŠ é¡¹</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>文件类型</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>大å°</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>游玩时间</translation> </message> @@ -6323,7 +6272,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>åŒå‡»æ·»åŠ æ–°çš„æ¸¸æˆæ–‡ä»¶å¤¹</translation> </message> @@ -6336,12 +6285,12 @@ Would you like to bypass this and exit anyway?</source> <translation><numerusform>%1 / %n 个结果</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>æœç´¢:</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>æœç´¢æ¸¸æˆ</translation> </message> @@ -6853,176 +6802,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>釿–°ç”Ÿæˆå¯†é’¥... (&R)</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>验è¯å·²å®‰è£…内容的完整性 (&V)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>关于 yuzu (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>å•çª—å£æ¨¡å¼ (&W)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>设置... (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>显示åœé å°éƒ¨ä»¶çš„æ ‡é¢˜ (&O)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>显示æœç´¢æ (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>æ˜¾ç¤ºçŠ¶æ€æ (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>æ˜¾ç¤ºçŠ¶æ€æ </translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>æµè§ˆå…¬å…±æ¸¸æˆå¤§åŽ… (&B)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>创建房间 (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>离开房间 (&L)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>直接连接到房间 (&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>æ˜¾ç¤ºå½“å‰æˆ¿é—´ (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>å…¨å± (&U)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>釿–°å¯åЍ (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>åŠ è½½/移除 Amiibo... (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>报告兼容性 (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>打开 Mod é¡µé¢ (&M)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>查看快速导航 (&Q)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>FAQ (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>打开 yuzu 文件夹 (&Y)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>æ•获截图 (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>打开相册 (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>è®¾ç½®æ˜µç§°åŠæ‰€æœ‰è€… (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>åˆ é™¤æ¸¸æˆæ•°æ® (&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>é‡ç½® Amiibo (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>æ ¼å¼åŒ– Amiibo (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>打开 Mii Editor (&M)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>é…ç½® TAS... (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>é…ç½®å½“å‰æ¸¸æˆ... (&U)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>开始 (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>é‡ç½® (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>录制 (&E)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>打开控制器èœå• (&C)</translation> </message> diff --git a/dist/languages/zh_TW.ts b/dist/languages/zh_TW.ts index 3452ff6af..a44653b86 100644 --- a/dist/languages/zh_TW.ts +++ b/dist/languages/zh_TW.ts @@ -684,759 +684,759 @@ Compute pipelines are always enabled on all other drivers.</source> </message> <message> <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="146"/> - <source>Custom RTC</source> - <translation>自訂 RTC</translation> + <source>Custom RTC Date:</source> + <translation>自定义系统时间:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="148"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> <source>Language:</source> <translation>è¯è¨€ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="149"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> <source>Note: this can be overridden when region setting is auto-select</source> <translation>注æ„:當“å€åŸŸâ€è¨å®šæ˜¯â€œè‡ªå‹•鏿“‡â€æ™‚,æ¤è¨å®šå¯èƒ½æœƒè¢«è¦†å¯«ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="150"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> <source>Region:</source> <translation>å€åŸŸï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="151"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> <source>Time Zone:</source> <translation>時å€ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="152"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="154"/> <source>Sound Output Mode:</source> <translation>音訊輸出模å¼ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="153"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="155"/> <source>Console Mode:</source> <translation>æŽ§åˆ¶å°æ¨¡å¼ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="171"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="173"/> <source>Prompt for user on game boot</source> <translation>å•Ÿå‹•éŠæˆ²æ™‚æç¤ºé¸æ“‡ä½¿ç”¨è€…</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="172"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> <source>Pause emulation when in background</source> <translation>模擬器在背景執行時暫åœ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="174"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> <source>Confirm before stopping emulation</source> <translation>åœæ¢æ¨¡æ‹Ÿæ—¶éœ€è¦ç¡®è®¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="176"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="178"/> <source>Hide mouse on inactivity</source> <translation>æ»‘é¼ é–’ç½®æ™‚è‡ªå‹•éš±è—</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="177"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="179"/> <source>Disable controller applet</source> <translation>ç¦ç”¨æŽ§åˆ¶å™¨ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="181"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="183"/> <source>Enable Gamemode</source> <translation>å¯ç”¨æ¸¸æˆæ¨¡å¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="207"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="208"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="210"/> <source>GPU</source> <translation>GPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="209"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="211"/> <source>CPU Asynchronous</source> <translation>CPU å¼‚æ¥æ¨¡æ‹Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="214"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> <source>Uncompressed (Best quality)</source> <translation>ä¸å£“縮 (最高å“質)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="215"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="217"/> <source>BC1 (Low quality)</source> <translation>BC1 (低å“質)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="216"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="218"/> <source>BC3 (Medium quality)</source> <translation>BC3 (ä¸å“質)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="223"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="225"/> <source>Vulkan</source> <translation>Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="224"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="226"/> <source>Null</source> <translation>ç„¡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="229"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> <source>GLSL</source> <translation>GLSL</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="230"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="232"/> <source>GLASM (Assembly Shaders, NVIDIA Only)</source> <translation>GLASM(組åˆèªžè¨€è‘—è‰²å™¨ï¼Œåƒ…é™ NVIDIA)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="231"/> - <source>SPIR-V (Experimental, Mesa Only)</source> - <translation>SPIR-V (實驗性,僅 Mesa)</translation> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="233"/> + <source>SPIR-V (Experimental, AMD/Mesa Only)</source> + <translation>SPIR-V (å®žéªŒæ€§ï¼Œä»…é™ AMD/Mesa)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="235"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> <source>Normal</source> <translation>標準</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="236"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="238"/> <source>High</source> <translation>高</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="237"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="239"/> <source>Extreme</source> <translation>極高</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="242"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> <source>Auto</source> <translation>自動</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="243"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> <source>Accurate</source> <translation>高精度</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="244"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="246"/> <source>Unsafe</source> <translation>低精度</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="245"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="247"/> <source>Paranoid (disables most optimizations)</source> <translation>忉§æ¨¡å¼ (ç¦ç”¨ç»å¤§å¤šæ•°ä¼˜åŒ–项)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="249"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="251"/> <source>Dynarmic</source> <translation>Dynarmic</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="250"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="252"/> <source>NCE</source> <translation>NCE</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="254"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="256"/> <source>Borderless Windowed</source> <translation>無邊框視窗</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="255"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="257"/> <source>Exclusive Fullscreen</source> <translation>全螢幕ç¨å </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="259"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> <source>No Video Output</source> <translation>無視訊輸出</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="260"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="262"/> <source>CPU Video Decoding</source> <translation>CPU 視訊解碼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="261"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="263"/> <source>GPU Video Decoding (Default)</source> <translation>GPU 視訊解碼(é è¨ï¼‰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="266"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> <source>0.5X (360p/540p) [EXPERIMENTAL]</source> <translation>0.5X (360p/540p) [实验性]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="267"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> <source>0.75X (540p/810p) [EXPERIMENTAL]</source> <translation>0.75X (540p/810p) [實驗性]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="268"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> <source>1X (720p/1080p)</source> <translation>1X (720p/1080p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="269"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> <translation>1.5X (1080p/1620p) [實驗性]</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="270"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> <source>2X (1440p/2160p)</source> <translation>2X (1440p/2160p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> <source>3X (2160p/3240p)</source> <translation>3X (2160p/3240p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> <source>4X (2880p/4320p)</source> <translation>4X (2880p/4320p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="273"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> <source>5X (3600p/5400p)</source> <translation>5X (3600p/5400p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="274"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> <source>6X (4320p/6480p)</source> <translation>6X (4320p/6480p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="275"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="277"/> <source>7X (5040p/7560p)</source> <translation>7X (5040p/7560p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="276"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="278"/> <source>8X (5760p/8640p)</source> <translation>8X (5760p/8640p)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="280"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> <source>Nearest Neighbor</source> <translation>最近鄰</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> <source>Bilinear</source> <translation>雙線性</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> <source>Bicubic</source> <translation>雙立方</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="283"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> <source>Gaussian</source> <translation>高斯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="284"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="286"/> <source>ScaleForce</source> <translation>強制縮放</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="285"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="287"/> <source>AMD FidelityFXâ„¢ï¸ Super Resolution</source> <translation>AMD FidelityFXâ„¢ï¸ è¶…ç´šè§£æžåº¦æŠ€è¡“</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="289"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> <source>None</source> <translation>ç„¡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="292"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="293"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="295"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> <source>Default (16:9)</source> <translation>é è¨ (16:9)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="296"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> <source>Force 4:3</source> <translation>強制 4:3</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="297"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> <source>Force 21:9</source> <translation>強制 21:9</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="300"/> <source>Force 16:10</source> <translation>強制 16:10</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="301"/> <source>Stretch to Window</source> <translation>延伸視窗</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="303"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> <source>Automatic</source> <translation>自動</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> <source>Default</source> <translation>é è¨</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> <source>2x</source> <translation>2x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="306"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> <source>4x</source> <translation>4x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="307"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="309"/> <source>8x</source> <translation>8x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="308"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="310"/> <source>16x</source> <translation>16x</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="313"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> <source>Japanese (日本語)</source> <translation>日文 (日本語)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> <source>American English</source> <translation>美å¼è‹±è¯</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> <source>French (français)</source> <translation>法文 (français)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="316"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> <source>German (Deutsch)</source> <translation>å¾·æ–‡ (Deutsch)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="317"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> <source>Italian (italiano)</source> <translation>義大利文 (italiano)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="318"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> <source>Spanish (español)</source> <translation>西ç牙文 (español)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="319"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> <source>Chinese</source> <translation>䏿–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="320"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> <source>Korean (한êµì–´)</source> <translation>韓文 (한êµì–´)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="321"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> <source>Dutch (Nederlands)</source> <translation>è·è˜æ–‡ (Nederlands)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="322"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> <source>Portuguese (português)</source> <translation>è‘¡è„牙文 (português)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="323"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> <source>Russian (РуÑÑкий)</source> <translation>ä¿„æ–‡ (РуÑÑкий)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="324"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> <source>Taiwanese</source> <translation>å°ç£ä¸æ–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="325"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> <source>British English</source> <translation>英å¼è‹±æ–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="326"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> <source>Canadian French</source> <translation>åŠ æ‹¿å¤§æ³•æ–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="327"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> <source>Latin American Spanish</source> <translation>拉ä¸ç¾Žæ´²è¥¿ç牙文</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="328"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> <source>Simplified Chinese</source> <translation>ç°¡é«”ä¸æ–‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="329"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="331"/> <source>Traditional Chinese (æ£é«”䏿–‡)</source> <translation>æ£é«”䏿–‡ (æ£é«”䏿–‡)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="330"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="332"/> <source>Brazilian Portuguese (português do Brasil)</source> <translation>巴西-è‘¡è„牙語 (português do Brasil)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="334"/> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> <source>Japan</source> <translation>日本</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="335"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> <source>USA</source> <translation>美國</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="336"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> <source>Europe</source> <translation>ææ´²</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="337"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> <source>Australia</source> <translation>澳洲</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="338"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> <source>China</source> <translation>ä¸åœ‹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="339"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="341"/> <source>Korea</source> <translation>å—韓</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="340"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="342"/> <source>Taiwan</source> <translation>å°ç£</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="346"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="348"/> <source>Auto (%1)</source> <comment>Auto select time zone</comment> <translation>自動 (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="350"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> <source>Default (%1)</source> <comment>Default time zone</comment> <translation>é è¨ (%1)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="352"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> <source>CET</source> <translation>䏿</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="353"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> <source>CST6CDT</source> <translation>CST6CDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="354"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> <source>Cuba</source> <translation>å¤å·´</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="355"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> <source>EET</source> <translation>EET</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="356"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> <source>Egypt</source> <translation>埃åŠ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="357"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> <source>Eire</source> <translation>愛爾è˜</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="358"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> <source>EST</source> <translation>北美æ±éƒ¨</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="359"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> <source>EST5EDT</source> <translation>EST5EDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> <source>GB</source> <translation>GB</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="361"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> <source>GB-Eire</source> <translation>è‹±åœ‹ï¼æ„›çˆ¾è˜</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="362"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> <source>GMT</source> <translation>GMT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="363"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> <source>GMT+0</source> <translation>GMT+0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="364"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> <source>GMT-0</source> <translation>GMT-0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="365"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> <source>GMT0</source> <translation>GMT0</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="366"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> <source>Greenwich</source> <translation>æ ¼æž—å¨æ²»</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="367"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> <source>Hongkong</source> <translation>香港</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="368"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> <source>HST</source> <translation>å¤å¨å¤·</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="369"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> <source>Iceland</source> <translation>冰島</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="370"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> <source>Iran</source> <translation>伊朗</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="371"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="373"/> <source>Israel</source> <translation>以色列</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="372"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> <source>Jamaica</source> <translation>ç‰™è²·åŠ </translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="374"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> <source>Kwajalein</source> <translation>ç“œåŠ æž—ç’°ç¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="375"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> <source>Libya</source> <translation>利比亞</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="376"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> <source>MET</source> <translation>䏿</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="377"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> <source>MST</source> <translation>北美山å€</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="378"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> <source>MST7MDT</source> <translation>MST7MDT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="379"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> <source>Navajo</source> <translation>ç´ç“¦éœ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="380"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> <source>NZ</source> <translation>ç´è¥¿è˜</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="381"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> <source>NZ-CHAT</source> <translation>ç´è¥¿è˜ï¼æŸ¥å¡”姆群島</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="382"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> <source>Poland</source> <translation>æ³¢è˜</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="383"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> <source>Portugal</source> <translation>è‘¡è„牙</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="384"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> <source>PRC</source> <translation>ä¸åœ‹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="385"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> <source>PST8PDT</source> <translation>太平洋</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="386"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> <source>ROC</source> <translation>臺ç£</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="387"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> <source>ROK</source> <translation>韓國</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="388"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> <source>Singapore</source> <translation>æ–°åŠ å¡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="389"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> <source>Turkey</source> <translation>土耳其</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="390"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> <source>UCT</source> <translation>UCT</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="391"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> <source>Universal</source> <translation>世界</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="392"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="393"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> <source>W-SU</source> <translation>莫斯科</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="394"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="396"/> <source>WET</source> <translation>西æ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="395"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="397"/> <source>Zulu</source> <translation>å”調世界時</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="399"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> <source>Mono</source> <translation>å–®è²é“</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="400"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="402"/> <source>Stereo</source> <translation>ç«‹é«”è²</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="401"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="403"/> <source>Surround</source> <translation>環繞音效</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="405"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> <source>4GB DRAM (Default)</source> <translation>4GB DRAM (默认)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="406"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="408"/> <source>6GB DRAM (Unsafe)</source> <translation>6GB DRAM (ä¸å®‰å…¨)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="407"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="409"/> <source>8GB DRAM (Unsafe)</source> <translation>8GB DRAM (ä¸å®‰å…¨)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="411"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="413"/> <source>Docked</source> <translation>TV</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="414"/> <source>Handheld</source> <translation>掌機模å¼</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="417"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> <source>Always ask (Default)</source> <translation>总是询问 (默认)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="420"/> <source>Only if game specifies not to stop</source> <translation>仅当游æˆä¸å¸Œæœ›åœæ¢æ—¶</translation> </message> <message> - <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/shared_translation.cpp" line="421"/> <source>Never ask</source> <translation>从ä¸è¯¢é—®</translation> </message> @@ -2315,33 +2315,33 @@ Compute pipelines are always enabled on all other drivers.</source> <translation>背景é¡è‰²:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="277"/> <source>%</source> <comment>FSR sharpening percentage (e.g. 50%)</comment> <translation>%</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="412"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="417"/> <source>Off</source> <translation>關閉</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="413"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> <source>VSync Off</source> <translation>åž‚ç›´åŒæ¥é—œ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="415"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="420"/> <source>Recommended</source> <translation>推薦</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="418"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="423"/> <source>On</source> <translation>開啟</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="419"/> + <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="424"/> <source>VSync On</source> <translation>åž‚ç›´åŒæ¥é–‹</translation> </message> @@ -3407,6 +3407,15 @@ To invert the axes, first move your joystick vertically, and then horizontally.< </message> </context> <context> + <name>ConfigureLinuxTab</name> + <message> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="6"/> + <location filename="../../src/yuzu/configuration/configure_linux_tab.ui" line="12"/> + <source>Linux</source> + <translation>Linux</translation> + </message> +</context> +<context> <name>ConfigureMotionTouch</name> <message> <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="6"/> @@ -3742,42 +3751,47 @@ Current values are %1% and %2% respectively.</source> <translation>æŸäº›è¨å®šåƒ…åœ¨éŠæˆ²æœªåŸ·è¡Œæ™‚æ‰èƒ½ä¿®æ”¹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="67"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> <source>Add-Ons</source> <translation>延伸模組</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> <source>System</source> <translation>系統</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> <source>CPU</source> <translation>CPU</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="70"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> <source>Graphics</source> <translation>圖形</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="71"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> <source>Adv. Graphics</source> <translation>進階圖形</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="72"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="74"/> <source>Audio</source> <translation>音訊</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="73"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="75"/> <source>Input Profiles</source> <translation>輸入è¨å®šæª”</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="76"/> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="78"/> + <source>Linux</source> + <translation>Linux</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="82"/> <source>Properties</source> <translation>屬性</translation> </message> @@ -3881,67 +3895,67 @@ Current values are %1% and %2% respectively.</source> <translation>輸入新使用者的å稱</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="221"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="222"/> <source>Enter a new username:</source> <translation>輸入新的使用者å稱</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="275"/> <source>Select User Image</source> <translation>鏿“‡ä½¿ç”¨è€…圖片</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="276"/> <source>JPEG Images (*.jpg *.jpeg)</source> <translation>JPEG圖片 (*.jpg *.jpeg)</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="285"/> <source>Error deleting image</source> <translation>刪除圖片時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="282"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="286"/> <source>Error occurred attempting to overwrite previous image at: %1.</source> <translation>嘗試覆寫之å‰çš„圖片時發生錯誤:%1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="290"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="294"/> <source>Error deleting file</source> <translation>刪除檔案時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="291"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="295"/> <source>Unable to delete existing file: %1.</source> <translation>無法刪除檔案:%1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="298"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="302"/> <source>Error creating user image directory</source> <translation>建立使用者圖片資料夾時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="299"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="303"/> <source>Unable to create directory %1 for storing user images.</source> <translation>無法建立儲å˜ä½¿ç”¨è€…圖片的資料夾 %1</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="304"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="308"/> <source>Error copying user image</source> <translation>複製使用者圖片時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="305"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="309"/> <source>Unable to copy image from %1 to %2</source> <translation>無法將圖片從 %1 複製到 %2</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="318"/> <source>Error resizing user image</source> <translation>èª¿æ•´ä½¿ç”¨è€…åœ–ç‰‡å¤§å°æ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="319"/> <source>Unable to resize image</source> <translation>無法調整圖片大å°</translation> </message> @@ -3949,17 +3963,17 @@ Current values are %1% and %2% respectively.</source> <context> <name>ConfigureProfileManagerDeleteDialog</name> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="336"/> <source>Delete this user? All of the user's save data will be deleted.</source> <translation>åˆ é™¤æ¤ç”¨æˆ·ï¼Ÿæ¤ç”¨æˆ·ä¿å˜çš„æ‰€æœ‰æ•°æ®éƒ½å°†è¢«åˆ 除。</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="348"/> <source>Confirm Delete</source> <translation>確èªåˆªé™¤</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> + <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="364"/> <source>Name: %1 UUID: %2</source> <translation>å稱: %1 @@ -4113,7 +4127,7 @@ UUID: %2</translation> <translation>æ ¸å¿ƒ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="61"/> + <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> @@ -4825,808 +4839,808 @@ 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="214"/> + <location filename="../../src/yuzu/main.cpp" line="217"/> <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="217"/> + <location filename="../../src/yuzu/main.cpp" line="220"/> <source>Telemetry</source> <translation>陿¸¬</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="450"/> + <location filename="../../src/yuzu/main.cpp" line="453"/> <source>Broken Vulkan Installation Detected</source> <translation>檢查到 Vulkan 的安è£å·²ææ¯€</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="451"/> + <location filename="../../src/yuzu/main.cpp" line="454"/> <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="476"/> + <location filename="../../src/yuzu/main.cpp" line="479"/> <source>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>æ£åœ¨åŸ·è¡ŒéŠæˆ²</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="856"/> + <location filename="../../src/yuzu/main.cpp" line="871"/> <source>Loading Web Applet...</source> <translation>載入 Web å°ç¨‹å¼..</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="906"/> - <location filename="../../src/yuzu/main.cpp" line="909"/> + <location filename="../../src/yuzu/main.cpp" line="921"/> + <location filename="../../src/yuzu/main.cpp" line="924"/> <source>Disable Web Applet</source> <translation>åœç”¨ Web å°ç¨‹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="910"/> + <location filename="../../src/yuzu/main.cpp" line="925"/> <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="1026"/> + <location filename="../../src/yuzu/main.cpp" line="1041"/> <source>The amount of shaders currently being built</source> <translation>ç›®å‰æ£åœ¨å»ºæ§‹çš„著色器數é‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1028"/> + <location filename="../../src/yuzu/main.cpp" line="1043"/> <source>The current selected resolution scaling multiplier.</source> <translation>ç›®å‰é¸æ“‡çš„è§£æžåº¦ç¸®æ”¾æ¯”例。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1031"/> + <location filename="../../src/yuzu/main.cpp" line="1046"/> <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="1034"/> + <location filename="../../src/yuzu/main.cpp" line="1049"/> <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="1038"/> + <location filename="../../src/yuzu/main.cpp" line="1053"/> <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="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Unmute</source> <translation>å–æ¶ˆéœéŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1098"/> + <location filename="../../src/yuzu/main.cpp" line="1113"/> <source>Mute</source> <translation>éœéŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1103"/> + <location filename="../../src/yuzu/main.cpp" line="1118"/> <source>Reset Volume</source> <translation>é‡è¨éŸ³é‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1290"/> + <location filename="../../src/yuzu/main.cpp" line="1305"/> <source>&Clear Recent Files</source> <translation>清除最近的檔案(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1624"/> + <location filename="../../src/yuzu/main.cpp" line="1637"/> <source>&Continue</source> <translation>繼續(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1626"/> + <location filename="../../src/yuzu/main.cpp" line="1639"/> <source>&Pause</source> <translation>&æš«åœ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1796"/> + <location filename="../../src/yuzu/main.cpp" line="1808"/> <source>Warning Outdated Game Format</source> <translation>éŽæ™‚éŠæˆ²æ ¼å¼è¦å‘Š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1797"/> + <location filename="../../src/yuzu/main.cpp" line="1809"/> <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="1809"/> - <location filename="../../src/yuzu/main.cpp" line="1843"/> + <location filename="../../src/yuzu/main.cpp" line="1821"/> + <location filename="../../src/yuzu/main.cpp" line="1855"/> <source>Error while loading ROM!</source> <translation>載入 ROM 時發生錯誤ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1810"/> + <location filename="../../src/yuzu/main.cpp" line="1822"/> <source>The ROM format is not supported.</source> <translation>æ¤ ROM æ ¼å¼ä¸æ”¯æ´</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1814"/> + <location filename="../../src/yuzu/main.cpp" line="1826"/> <source>An error occurred initializing the video core.</source> <translation>åˆå§‹åŒ–è¦–è¨Šæ ¸å¿ƒæ™‚ç™¼ç”ŸéŒ¯èª¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1815"/> + <location filename="../../src/yuzu/main.cpp" line="1827"/> <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="1830"/> + <location filename="../../src/yuzu/main.cpp" line="1842"/> <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="1833"/> + <location filename="../../src/yuzu/main.cpp" line="1845"/> <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="1844"/> + <location filename="../../src/yuzu/main.cpp" line="1856"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>發生未知錯誤,請檢視紀錄了解細節。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2029"/> + <location filename="../../src/yuzu/main.cpp" line="2046"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2030"/> + <location filename="../../src/yuzu/main.cpp" line="2047"/> <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="2096"/> + <location filename="../../src/yuzu/main.cpp" line="2117"/> <source>Closing software...</source> <translation>æ£åœ¨é—œé–‰è»Ÿé«”…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2259"/> + <location filename="../../src/yuzu/main.cpp" line="2283"/> <source>Save Data</source> <translation>儲å˜è³‡æ–™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2315"/> + <location filename="../../src/yuzu/main.cpp" line="2339"/> <source>Mod Data</source> <translation>模組資料</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2328"/> + <location filename="../../src/yuzu/main.cpp" line="2352"/> <source>Error Opening %1 Folder</source> <translation>開啟資料夾 %1 時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2329"/> - <location filename="../../src/yuzu/main.cpp" line="3127"/> + <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="3116"/> <source>Folder does not exist!</source> <translation>資料夾ä¸å˜åœ¨</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2341"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Error Opening Transferable Shader Cache</source> <translation>開啟通用著色器快å–ä½ç½®æ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2342"/> + <location filename="../../src/yuzu/main.cpp" line="2366"/> <source>Failed to create the shader cache directory for this title.</source> <translation>無法新增æ¤éŠæˆ²çš„著色器快å–資料夾。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2439"/> <source>Error Removing Contents</source> <translation>移除內容時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2417"/> + <location filename="../../src/yuzu/main.cpp" line="2441"/> <source>Error Removing Update</source> <translation>移除更新時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2443"/> <source>Error Removing DLC</source> <translation>移除 DLC 時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2428"/> + <location filename="../../src/yuzu/main.cpp" line="2452"/> <source>Remove Installed Game Contents?</source> <translation>移除已安è£çš„éŠæˆ²å…§å®¹ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2430"/> + <location filename="../../src/yuzu/main.cpp" line="2454"/> <source>Remove Installed Game Update?</source> <translation>移除已安è£çš„éŠæˆ²æ›´æ–°ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2456"/> <source>Remove Installed Game DLC?</source> <translation>移除已安è£çš„éŠæˆ² DLC?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2438"/> + <location filename="../../src/yuzu/main.cpp" line="2462"/> <source>Remove Entry</source> <translation>ç§»é™¤é …ç›®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2468"/> - <location filename="../../src/yuzu/main.cpp" line="2484"/> - <location filename="../../src/yuzu/main.cpp" line="2515"/> - <location filename="../../src/yuzu/main.cpp" line="2594"/> - <location filename="../../src/yuzu/main.cpp" line="2628"/> - <location filename="../../src/yuzu/main.cpp" line="2651"/> + <location filename="../../src/yuzu/main.cpp" line="2490"/> + <location filename="../../src/yuzu/main.cpp" line="2502"/> + <location filename="../../src/yuzu/main.cpp" line="2518"/> + <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2654"/> <source>Successfully Removed</source> <translation>移除æˆåŠŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2469"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Successfully removed the installed base game.</source> <translation>æˆåŠŸç§»é™¤å·²å®‰è£çš„éŠæˆ²ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2473"/> + <location filename="../../src/yuzu/main.cpp" line="2495"/> <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="2485"/> + <location filename="../../src/yuzu/main.cpp" line="2503"/> <source>Successfully removed the installed update.</source> <translation>æˆåŠŸç§»é™¤å·²å®‰è£çš„éŠæˆ²æ›´æ–°ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2488"/> + <location filename="../../src/yuzu/main.cpp" line="2506"/> <source>There is no update installed for this title.</source> <translation>æ¤éŠæˆ²æ²’有已安è£çš„æ›´æ–°ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2511"/> + <location filename="../../src/yuzu/main.cpp" line="2514"/> <source>There are no DLC installed for this title.</source> <translation>æ¤éŠæˆ²æ²’有已安è£çš„ DLC。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2516"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Successfully removed %1 installed DLC.</source> <translation>æˆåŠŸç§»é™¤éŠæˆ² %1 已安è£çš„ DLC。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>刪除 OpenGL 模å¼çš„著色器快å–?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2526"/> + <location filename="../../src/yuzu/main.cpp" line="2529"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>刪除 Vulkan 模å¼çš„著色器快å–?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2528"/> + <location filename="../../src/yuzu/main.cpp" line="2531"/> <source>Delete All Transferable Shader Caches?</source> <translation>刪除所有的著色器快å–?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2530"/> + <location filename="../../src/yuzu/main.cpp" line="2533"/> <source>Remove Custom Game Configuration?</source> <translation>移除é¡å¤–éŠæˆ²è¨å®šï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2532"/> + <location filename="../../src/yuzu/main.cpp" line="2535"/> <source>Remove Cache Storage?</source> <translation>移除快å–儲å˜ç©ºé–“?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2538"/> + <location filename="../../src/yuzu/main.cpp" line="2541"/> <source>Remove File</source> <translation>刪除檔案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Remove Play Time Data</source> <translation>清除éŠçŽ©æ™‚é–“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2563"/> + <location filename="../../src/yuzu/main.cpp" line="2566"/> <source>Reset play time?</source> <translation>é‡è¨éŠçŽ©æ™‚é–“ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2589"/> - <location filename="../../src/yuzu/main.cpp" line="2597"/> + <location filename="../../src/yuzu/main.cpp" line="2592"/> + <location filename="../../src/yuzu/main.cpp" line="2600"/> <source>Error Removing Transferable Shader Cache</source> <translation>åˆªé™¤é€šç”¨è‘—è‰²å™¨å¿«å–æ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2590"/> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2593"/> + <location filename="../../src/yuzu/main.cpp" line="2627"/> <source>A shader cache for this title does not exist.</source> <translation>æ¤éŠæˆ²æ²’有著色器快å–</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2598"/> <source>Successfully removed the transferable shader cache.</source> <translation>æˆåŠŸåˆªé™¤è‘—è‰²å™¨å¿«å–。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2598"/> + <location filename="../../src/yuzu/main.cpp" line="2601"/> <source>Failed to remove the transferable shader cache.</source> <translation>刪除通用著色器快å–失敗。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2613"/> + <location filename="../../src/yuzu/main.cpp" line="2616"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>移除 Vulkan 驅動程å¼ç®¡ç·šå¿«å–時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2614"/> + <location filename="../../src/yuzu/main.cpp" line="2617"/> <source>Failed to remove the driver pipeline cache.</source> <translation>無法移除驅動程å¼ç®¡ç·šå¿«å–。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2623"/> - <location filename="../../src/yuzu/main.cpp" line="2631"/> + <location filename="../../src/yuzu/main.cpp" line="2626"/> + <location filename="../../src/yuzu/main.cpp" line="2634"/> <source>Error Removing Transferable Shader Caches</source> <translation>åˆªé™¤é€šç”¨è‘—è‰²å™¨å¿«å–æ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2629"/> + <location filename="../../src/yuzu/main.cpp" line="2632"/> <source>Successfully removed the transferable shader caches.</source> <translation>æˆåŠŸåˆªé™¤é€šç”¨è‘—è‰²å™¨å¿«å–。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2632"/> + <location filename="../../src/yuzu/main.cpp" line="2635"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>無法刪除著色器快å–資料夾。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2648"/> + <location filename="../../src/yuzu/main.cpp" line="2657"/> <source>Error Removing Custom Configuration</source> <translation>移除é¡å¤–éŠæˆ²è¨å®šæ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2649"/> <source>A custom configuration for this title does not exist.</source> <translation>æ¤éŠæˆ²æ²’有é¡å¤–è¨å®šã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2652"/> + <location filename="../../src/yuzu/main.cpp" line="2655"/> <source>Successfully removed the custom game configuration.</source> <translation>æˆåŠŸç§»é™¤é¡å¤–éŠæˆ²è¨å®šã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2655"/> + <location filename="../../src/yuzu/main.cpp" line="2658"/> <source>Failed to remove the custom game configuration.</source> <translation>移除é¡å¤–éŠæˆ²è¨å®šå¤±æ•—。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2677"/> - <location filename="../../src/yuzu/main.cpp" line="2760"/> + <location filename="../../src/yuzu/main.cpp" line="2680"/> + <location filename="../../src/yuzu/main.cpp" line="2764"/> <source>RomFS Extraction Failed!</source> <translation>RomFS 抽å–失敗ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2678"/> + <location filename="../../src/yuzu/main.cpp" line="2681"/> <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="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Full</source> <translation>全部</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2735"/> + <location filename="../../src/yuzu/main.cpp" line="2739"/> <source>Skeleton</source> <translation>部分</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2737"/> + <location filename="../../src/yuzu/main.cpp" line="2741"/> <source>Select RomFS Dump Mode</source> <translation>鏿“‡RomFS傾尿¨¡å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2738"/> + <location filename="../../src/yuzu/main.cpp" line="2742"/> <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="2761"/> + <location filename="../../src/yuzu/main.cpp" line="2765"/> <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="2768"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> <source>Extracting RomFS...</source> <translation>æŠ½å– RomFS ä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2768"/> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="3266"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2772"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="3255"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2778"/> + <location filename="../../src/yuzu/main.cpp" line="2782"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS 抽å–完æˆï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2779"/> - <location filename="../../src/yuzu/main.cpp" line="2833"/> - <location filename="../../src/yuzu/main.cpp" line="4305"/> + <location filename="../../src/yuzu/main.cpp" line="2783"/> + <location filename="../../src/yuzu/main.cpp" line="2814"/> + <location filename="../../src/yuzu/main.cpp" line="4139"/> <source>The operation completed successfully.</source> <translation>動作已æˆåŠŸå®Œæˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2790"/> + <location filename="../../src/yuzu/main.cpp" line="2794"/> <source>Integrity verification couldn't be performed!</source> <translation>無法執行完整性驗è‰ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2795"/> <source>File contents were not checked for validity.</source> <translation>未檢查檔案內容的完整性。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2794"/> - <location filename="../../src/yuzu/main.cpp" line="4301"/> - <source>Integrity verification failed!</source> - <translation>完整性驗è‰å¤±æ•—ï¼</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2795"/> - <source>File contents may be corrupt.</source> - <translation>檔案å¯èƒ½å·²ç¶“ææ¯€ã€‚</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="2804"/> - <location filename="../../src/yuzu/main.cpp" line="4213"/> + <location filename="../../src/yuzu/main.cpp" line="2798"/> + <location filename="../../src/yuzu/main.cpp" line="4121"/> <source>Verifying integrity...</source> <translation>æ£åœ¨é©—è‰å®Œæ•´æ€§...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2832"/> - <location filename="../../src/yuzu/main.cpp" line="4304"/> + <location filename="../../src/yuzu/main.cpp" line="2813"/> + <location filename="../../src/yuzu/main.cpp" line="4138"/> <source>Integrity verification succeeded!</source> <translation>å®Œæ•´æ€§é©—è‰æˆåŠŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2961"/> - <location filename="../../src/yuzu/main.cpp" line="2965"/> - <location filename="../../src/yuzu/main.cpp" line="2971"/> - <location filename="../../src/yuzu/main.cpp" line="2978"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> + <location filename="../../src/yuzu/main.cpp" line="4144"/> + <source>Integrity verification failed!</source> + <translation>完整性驗è‰å¤±æ•—ï¼</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2818"/> + <source>File contents may be corrupt.</source> + <translation>檔案å¯èƒ½å·²ç¶“ææ¯€ã€‚</translation> + </message> + <message> + <location filename="../../src/yuzu/main.cpp" line="2950"/> + <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="2967"/> <source>Create Shortcut</source> <translation>建立æ·å¾‘</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2962"/> + <location filename="../../src/yuzu/main.cpp" line="2951"/> <source>Do you want to launch the game in fullscreen?</source> <translation>æ‚¨æƒ³ä»¥å…¨å±æ¨¡å¼å¯åŠ¨æ¸¸æˆå—?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2966"/> + <location filename="../../src/yuzu/main.cpp" line="2955"/> <source>Successfully created a shortcut to %1</source> <translation>å·²æˆåŠŸåœ¨ %1 建立æ·å¾‘</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2972"/> + <location filename="../../src/yuzu/main.cpp" line="2961"/> <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="2979"/> + <location filename="../../src/yuzu/main.cpp" line="2968"/> <source>Failed to create a shortcut to %1</source> <translation>为 %1 åˆ›å»ºå¿«æ·æ–¹å¼æ—¶å¤±è´¥</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2997"/> + <location filename="../../src/yuzu/main.cpp" line="2986"/> <source>Create Icon</source> <translation>建立圖示</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2998"/> + <location filename="../../src/yuzu/main.cpp" line="2987"/> <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="3126"/> + <location filename="../../src/yuzu/main.cpp" line="3115"/> <source>Error Opening %1</source> <translation>開啟 %1 時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3135"/> + <location filename="../../src/yuzu/main.cpp" line="3124"/> <source>Select Directory</source> <translation>鏿“‡è³‡æ–™å¤¾</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3164"/> + <location filename="../../src/yuzu/main.cpp" line="3153"/> <source>Properties</source> <translation>屬性</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3165"/> + <location filename="../../src/yuzu/main.cpp" line="3154"/> <source>The game properties could not be loaded.</source> <translation>ç„¡æ³•è¼‰å…¥éŠæˆ²å±¬æ€§</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3171"/> <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="3186"/> + <location filename="../../src/yuzu/main.cpp" line="3175"/> <source>Load File</source> <translation>開啟檔案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3199"/> + <location filename="../../src/yuzu/main.cpp" line="3188"/> <source>Open Extracted ROM Directory</source> <translation>開啟已抽å–çš„ ROM 資料夾</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3210"/> + <location filename="../../src/yuzu/main.cpp" line="3199"/> <source>Invalid Directory Selected</source> <translation>鏿“‡çš„資料夾無效</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3211"/> + <location filename="../../src/yuzu/main.cpp" line="3200"/> <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="3221"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <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="3226"/> + <location filename="../../src/yuzu/main.cpp" line="3215"/> <source>Install Files</source> <translation>å®‰è£æª”案</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3273"/> + <location filename="../../src/yuzu/main.cpp" line="3262"/> <source>%n file(s) remaining</source> <translation><numerusform>剩餘 %n 個檔案</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3275"/> + <location filename="../../src/yuzu/main.cpp" line="3264"/> <source>Installing file "%1"...</source> <translation>æ£åœ¨å®‰è£æª”案「%1ã€...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3320"/> - <location filename="../../src/yuzu/main.cpp" line="3334"/> + <location filename="../../src/yuzu/main.cpp" line="3318"/> + <location filename="../../src/yuzu/main.cpp" line="3332"/> <source>Install Results</source> <translation>安è£çµæžœ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3321"/> + <location filename="../../src/yuzu/main.cpp" line="3319"/> <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="3327"/> + <location filename="../../src/yuzu/main.cpp" line="3325"/> <source>%n file(s) were newly installed </source> <translation><numerusform>最近安è£äº† %n 個檔案 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3330"/> + <location filename="../../src/yuzu/main.cpp" line="3328"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n 個檔案被å–代 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3332"/> + <location filename="../../src/yuzu/main.cpp" line="3330"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n 個檔案安è£å¤±æ•—</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3431"/> + <location filename="../../src/yuzu/main.cpp" line="3340"/> <source>System Application</source> <translation>系統應用程å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3341"/> <source>System Archive</source> <translation>系統檔案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3342"/> <source>System Application Update</source> <translation>ç³»çµ±æ‡‰ç”¨ç¨‹å¼æ›´æ–°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3434"/> + <location filename="../../src/yuzu/main.cpp" line="3343"/> <source>Firmware Package (Type A)</source> <translation>韌體包(Aåž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3435"/> + <location filename="../../src/yuzu/main.cpp" line="3344"/> <source>Firmware Package (Type B)</source> <translation>韌體包(Båž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3436"/> + <location filename="../../src/yuzu/main.cpp" line="3345"/> <source>Game</source> <translation>éŠæˆ²</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3437"/> + <location filename="../../src/yuzu/main.cpp" line="3346"/> <source>Game Update</source> <translation>éŠæˆ²æ›´æ–°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3438"/> + <location filename="../../src/yuzu/main.cpp" line="3347"/> <source>Game DLC</source> <translation>éŠæˆ² DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3439"/> + <location filename="../../src/yuzu/main.cpp" line="3348"/> <source>Delta Title</source> <translation>Delta Title</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3442"/> + <location filename="../../src/yuzu/main.cpp" line="3351"/> <source>Select NCA Install Type...</source> <translation>鏿“‡ NCA 安è£é¡žåž‹...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3443"/> + <location filename="../../src/yuzu/main.cpp" line="3352"/> <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="3449"/> + <location filename="../../src/yuzu/main.cpp" line="3358"/> <source>Failed to Install</source> <translation>安è£å¤±æ•—</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3450"/> + <location filename="../../src/yuzu/main.cpp" line="3359"/> <source>The title type you selected for the NCA is invalid.</source> <translation>鏿“‡çš„ NCA 安è£é¡žåž‹ç„¡æ•ˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3485"/> + <location filename="../../src/yuzu/main.cpp" line="3394"/> <source>File not found</source> <translation>找ä¸åˆ°æª”案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3486"/> + <location filename="../../src/yuzu/main.cpp" line="3395"/> <source>File "%1" not found</source> <translation>找ä¸åˆ°ã€Œ%1ã€æª”案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3603"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>OK</source> <translation>確定</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3629"/> - <location filename="../../src/yuzu/main.cpp" line="3648"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> + <location filename="../../src/yuzu/main.cpp" line="3560"/> <source>Hardware requirements not met</source> <translation>硬體ä¸ç¬¦åˆéœ€æ±‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3649"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> + <location filename="../../src/yuzu/main.cpp" line="3561"/> <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="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3553"/> <source>Missing yuzu Account</source> <translation>未è¨å®š yuzu 帳號</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3554"/> <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="3657"/> + <location filename="../../src/yuzu/main.cpp" line="3569"/> <source>Error opening URL</source> <translation>開啟 URL 時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3570"/> <source>Unable to open the URL "%1".</source> <translation>無法開啟 URL:「%1ã€ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>TAS Recording</source> <translation>TAS 錄製</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> + <location filename="../../src/yuzu/main.cpp" line="3880"/> <source>Overwrite file of player 1?</source> <translation>覆寫玩家 1 的檔案?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="3899"/> <source>Invalid config detected</source> <translation>嵿¸¬åˆ°ç„¡æ•ˆè¨å®š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3988"/> + <location filename="../../src/yuzu/main.cpp" line="3900"/> <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="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4130"/> - <location filename="../../src/yuzu/main.cpp" line="4180"/> + <location filename="../../src/yuzu/main.cpp" line="4042"/> + <location filename="../../src/yuzu/main.cpp" line="4092"/> <source>The current amiibo has been removed</source> <translation>ç›®å‰ Amiibo 已被移除。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> <source>Error</source> <translation>錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4135"/> - <location filename="../../src/yuzu/main.cpp" line="4192"/> + <location filename="../../src/yuzu/main.cpp" line="4047"/> + <location filename="../../src/yuzu/main.cpp" line="4104"/> <source>The current game is not looking for amiibos</source> <translation>ç›®å‰éŠæˆ²ä¸¦æœªåœ¨å°‹æ‰¾ Amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4141"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo 檔案 (%1);; 所有檔案 (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4142"/> + <location filename="../../src/yuzu/main.cpp" line="4054"/> <source>Load Amiibo</source> <translation>開啟 Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4176"/> + <location filename="../../src/yuzu/main.cpp" line="4088"/> <source>Error loading Amiibo data</source> <translation>載入 Amiibo 資料時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4186"/> + <location filename="../../src/yuzu/main.cpp" line="4098"/> <source>The selected file is not a valid amiibo</source> <translation>é¸å–çš„æª”æ¡ˆä¸æ˜¯æœ‰æ•ˆçš„ Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4189"/> + <location filename="../../src/yuzu/main.cpp" line="4101"/> <source>The selected file is already on use</source> <translation>é¸å–的檔案已在使用ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4195"/> + <location filename="../../src/yuzu/main.cpp" line="4107"/> <source>An unknown error occurred</source> <translation>發生了未知錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4302"/> + <location filename="../../src/yuzu/main.cpp" line="4145"/> <source>Verification failed for the following files: %1</source> @@ -5635,290 +5649,225 @@ Please, only use this feature to install updates and DLC.</source> %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4331"/> - <location filename="../../src/yuzu/main.cpp" line="4354"/> - <location filename="../../src/yuzu/main.cpp" line="4378"/> - <location filename="../../src/yuzu/main.cpp" line="4402"/> + <location filename="../../src/yuzu/main.cpp" line="4171"/> + <location filename="../../src/yuzu/main.cpp" line="4194"/> + <location filename="../../src/yuzu/main.cpp" line="4218"/> + <location filename="../../src/yuzu/main.cpp" line="4241"/> <source>No firmware available</source> <translation>ç„¡å¯ç”¨éŸŒé«”</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4332"/> + <location filename="../../src/yuzu/main.cpp" line="4172"/> <source>Please install the firmware to use the Album applet.</source> <translation>請安è£éŸŒé«”以使用相簿å°ç¨‹å¼ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4338"/> + <location filename="../../src/yuzu/main.cpp" line="4178"/> <source>Album Applet</source> <translation>相簿å°ç¨‹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4339"/> + <location filename="../../src/yuzu/main.cpp" line="4179"/> <source>Album applet is not available. Please reinstall firmware.</source> <translation>無法使用相簿å°ç¨‹å¼ã€‚請安è£éŸŒé«”。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4355"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source>Please install the firmware to use the Cabinet applet.</source> <translation>請安è£éŸŒé«”以使用 Cabinet å°ç¨‹å¼ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4361"/> + <location filename="../../src/yuzu/main.cpp" line="4201"/> <source>Cabinet Applet</source> <translation>Cabinet å°ç¨‹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4362"/> + <location filename="../../src/yuzu/main.cpp" line="4202"/> <source>Cabinet applet is not available. Please reinstall firmware.</source> <translation>無法使用 Cabinet å°ç¨‹å¼ã€‚請安è£éŸŒé«”。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4379"/> + <location filename="../../src/yuzu/main.cpp" line="4219"/> <source>Please install the firmware to use the Mii editor.</source> <translation>請安è£éŸŒé«”以使用 Mii 編輯器。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4385"/> + <location filename="../../src/yuzu/main.cpp" line="4225"/> <source>Mii Edit Applet</source> <translation>Mii 編輯器å°ç¨‹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4386"/> + <location filename="../../src/yuzu/main.cpp" line="4226"/> <source>Mii editor is not available. Please reinstall firmware.</source> <translation>Mii 編輯器無法使用。請安è£éŸŒé«”。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4403"/> + <location filename="../../src/yuzu/main.cpp" line="4242"/> <source>Please install the firmware to use the Controller Menu.</source> <translation>请安装固件以使用控制器èœå•。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4410"/> + <location filename="../../src/yuzu/main.cpp" line="4249"/> <source>Controller Applet</source> <translation>控制器è¨å®š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4411"/> + <location filename="../../src/yuzu/main.cpp" line="4250"/> <source>Controller Menu is not available. Please reinstall firmware.</source> <translation>控制器èœå•ä¸å¯ç”¨ã€‚è¯·é‡æ–°å®‰è£…固件。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4444"/> + <location filename="../../src/yuzu/main.cpp" line="4284"/> <source>Capture Screenshot</source> <translation>截圖</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4445"/> + <location filename="../../src/yuzu/main.cpp" line="4285"/> <source>PNG Image (*.png)</source> <translation>PNG 圖片 (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4528"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> <source>TAS state: Running %1/%2</source> <translation>TAS 狀態:æ£åœ¨åŸ·è¡Œ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4532"/> + <location filename="../../src/yuzu/main.cpp" line="4372"/> <source>TAS state: Recording %1</source> <translation>TAS 狀態:æ£åœ¨éŒ„製 %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4534"/> + <location filename="../../src/yuzu/main.cpp" line="4374"/> <source>TAS state: Idle %1/%2</source> <translation>TAS 狀態:閒置 %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4538"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>TAS State: Invalid</source> <translation>TAS 狀態:無效</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Stop Running</source> <translation>&åœæ¢åŸ·è¡Œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4552"/> + <location filename="../../src/yuzu/main.cpp" line="4392"/> <source>&Start</source> <translation>é–‹å§‹(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>Stop R&ecording</source> <translation>åœæ¢éŒ„製</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4553"/> + <location filename="../../src/yuzu/main.cpp" line="4393"/> <source>R&ecord</source> <translation>錄製 (&E)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="4577"/> + <location filename="../../src/yuzu/main.cpp" line="4417"/> <source>Building: %n shader(s)</source> <translation><numerusform>æ£åœ¨ç·¨è¯ %n 個著色器檔案</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4586"/> + <location filename="../../src/yuzu/main.cpp" line="4426"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>縮放比例:%1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4589"/> + <location filename="../../src/yuzu/main.cpp" line="4429"/> <source>Speed: %1% / %2%</source> <translation>速度:%1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4593"/> + <location filename="../../src/yuzu/main.cpp" line="4433"/> <source>Speed: %1%</source> <translation>速度:%1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4597"/> + <location filename="../../src/yuzu/main.cpp" line="4437"/> <source>Game: %1 FPS (Unlocked)</source> <translation>éŠæˆ²: %1 FPS(未é™åˆ¶ï¼‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4600"/> + <location filename="../../src/yuzu/main.cpp" line="4440"/> <source>Game: %1 FPS</source> <translation>éŠæˆ²ï¼š%1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4602"/> + <location filename="../../src/yuzu/main.cpp" line="4442"/> <source>Frame: %1 ms</source> <translation>ç•«æ ¼å»¶é²ï¼š%1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4632"/> + <location filename="../../src/yuzu/main.cpp" line="4472"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4642"/> + <location filename="../../src/yuzu/main.cpp" line="4482"/> <location filename="../../src/yuzu/configuration/shared_translation.h" line="42"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4650"/> + <location filename="../../src/yuzu/main.cpp" line="4490"/> <source>NO AA</source> <translation>抗鋸齒關</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4659"/> + <location filename="../../src/yuzu/main.cpp" line="4499"/> <source>VOLUME: MUTE</source> <translation>音é‡: éœéŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4662"/> + <location filename="../../src/yuzu/main.cpp" line="4502"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>音é‡ï¼š%1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4727"/> - <source>Confirm Key Rederivation</source> - <translation>確èªé‡æ–°ç”¢ç”Ÿé‡‘é‘°</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4728"/> - <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. -Please make sure this is what you want -and optionally make backups. - -This will delete your autogenerated key files and re-run the key derivation module.</source> - <translation>å³å°‡å¼·åˆ¶é‡æ–°ç”¢ç”Ÿå…¨éƒ¨çš„金鑰。 -å¦‚æžœæ‚¨ä¸æ¸…楚æ£åœ¨åšä»€éº¼ï¼Œ -這代表å¯èƒ½å…·æœ‰ç ´å£žæ€§å¾Œæžœã€‚ -請確定您希望這樣åšï¼Œä¸¦åšå¥½å‚™ä»½ã€‚ - -é€™å°‡åˆªé™¤æ‚¨è‡ªå‹•ç”¢ç”Ÿçš„é‡‘é‘°æª”æ¡ˆä¸¦é‡æ–°åŸ·è¡Œç”¢ç”Ÿé‡‘鑰模組。</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4762"/> - <source>Missing fuses</source> - <translation>éºå¤±é …ç›®</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4765"/> - <source> - Missing BOOT0</source> - <translation>- éºå¤± BOOT0</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4768"/> - <source> - Missing BCPKG2-1-Normal-Main</source> - <translation> - éºå¤± BCPKG2-1-Normal-Main</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4771"/> - <source> - Missing PRODINFO</source> - <translation>- éºå¤± PRODINFO</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4776"/> + <location filename="../../src/yuzu/main.cpp" line="4568"/> <source>Derivation Components Missing</source> <translation>éºå¤±ç”¢ç”Ÿå…ƒä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4777"/> - <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="4786"/> - <source>Deriving keys... -This may take up to a minute depending -on your system's performance.</source> - <translation>æ£åœ¨ç”¢ç”Ÿé‡‘é‘°... -最多需時 1 分é˜ï¼Œå…·é«”å–æ±ºæ–¼ -您的系統效能。</translation> + <location filename="../../src/yuzu/main.cpp" line="4569"/> + <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.</source> + <translation>密钥缺失。<br>请查看<a href='https://yuzu-emu.org/help/quickstart/'>yuzu 快速导航</a>ä»¥èŽ·å¾—ä½ çš„å¯†é’¥ã€å›ºä»¶å’Œæ¸¸æˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4788"/> - <source>Deriving Keys</source> - <translation>產生金鑰</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4805"/> - <source>System Archive Decryption Failed</source> - <translation>系統å°å˜è§£å¯†å¤±æ•—</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4806"/> - <source>Encryption keys failed to decrypt firmware. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.</source> - <translation>åŠ å¯†é‡‘é‘°ç„¡æ³•è§£å¯†éŸŒé«”ã€‚<br>è«‹ä¾å¾ª<a href='https://yuzu-emu.org/help/quickstart/'>yuzu 快速開始指å—</a>以å–得您的金鑰ã€éŸŒé«”å’ŒéŠæˆ²ã€‚</translation> - </message> - <message> - <location filename="../../src/yuzu/main.cpp" line="4923"/> + <location filename="../../src/yuzu/main.cpp" line="4661"/> <source>Select RomFS Dump Target</source> <translation>鏿“‡ RomFS 傾å°ç›®æ¨™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4924"/> + <location filename="../../src/yuzu/main.cpp" line="4662"/> <source>Please select which RomFS you would like to dump.</source> <translation>è«‹é¸æ“‡å¸Œæœ›å‚¾å°çš„ RomFS。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4947"/> + <location filename="../../src/yuzu/main.cpp" line="4685"/> <source>Are you sure you want to close yuzu?</source> <translation>您確定è¦é—œé–‰ yuzu å—Ž?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4948"/> - <location filename="../../src/yuzu/main.cpp" line="5028"/> - <location filename="../../src/yuzu/main.cpp" line="5040"/> + <location filename="../../src/yuzu/main.cpp" line="4686"/> + <location filename="../../src/yuzu/main.cpp" line="4766"/> + <location filename="../../src/yuzu/main.cpp" line="4778"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="5029"/> + <location filename="../../src/yuzu/main.cpp" line="4767"/> <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="5037"/> + <location filename="../../src/yuzu/main.cpp" line="4775"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6196,62 +6145,62 @@ Would you like to bypass this and exit anyway?</source> <translation>屬性</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="668"/> + <location filename="../../src/yuzu/game_list.cpp" line="664"/> <source>Scan Subfolders</source> <translation>包å«å資料夾</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="669"/> + <location filename="../../src/yuzu/game_list.cpp" line="665"/> <source>Remove Game Directory</source> <translation>ç§»é™¤éŠæˆ²è³‡æ–™å¤¾</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="688"/> + <location filename="../../src/yuzu/game_list.cpp" line="684"/> <source>â–² Move Up</source> <translation>â–² å‘上移動</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="689"/> + <location filename="../../src/yuzu/game_list.cpp" line="685"/> <source>â–¼ Move Down</source> <translation>â–¼ å‘下移動</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="690"/> + <location filename="../../src/yuzu/game_list.cpp" line="686"/> <source>Open Directory Location</source> <translation>開啟資料夾ä½ç½®</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="736"/> + <location filename="../../src/yuzu/game_list.cpp" line="732"/> <source>Clear</source> <translation>清除</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="800"/> + <location filename="../../src/yuzu/game_list.cpp" line="796"/> <source>Name</source> <translation>å稱</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="801"/> + <location filename="../../src/yuzu/game_list.cpp" line="797"/> <source>Compatibility</source> <translation>相容性</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="802"/> + <location filename="../../src/yuzu/game_list.cpp" line="798"/> <source>Add-ons</source> <translation>延伸模組</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="803"/> + <location filename="../../src/yuzu/game_list.cpp" line="799"/> <source>File type</source> <translation>æª”æ¡ˆæ ¼å¼</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="804"/> + <location filename="../../src/yuzu/game_list.cpp" line="800"/> <source>Size</source> <translation>大å°</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="805"/> + <location filename="../../src/yuzu/game_list.cpp" line="801"/> <source>Play time</source> <translation>éŠçŽ©æ™‚é–“</translation> </message> @@ -6322,7 +6271,7 @@ Would you like to bypass this and exit anyway?</source> <context> <name>GameListPlaceholder</name> <message> - <location filename="../../src/yuzu/game_list.cpp" line="973"/> + <location filename="../../src/yuzu/game_list.cpp" line="969"/> <source>Double-click to add a new folder to the game list</source> <translation>é€£é»žå…©ä¸‹ä»¥æ–°å¢žè³‡æ–™å¤¾è‡³éŠæˆ²æ¸…å–®</translation> </message> @@ -6335,12 +6284,12 @@ Would you like to bypass this and exit anyway?</source> <translation><numerusform>%1 / %n å€‹çµæžœ</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="817"/> + <location filename="../../src/yuzu/game_list.cpp" line="813"/> <source>Filter:</source> <translation>æœå°‹ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/game_list.cpp" line="818"/> + <location filename="../../src/yuzu/game_list.cpp" line="814"/> <source>Enter pattern to filter</source> <translation>輸入文å—以æœå°‹</translation> </message> @@ -6851,176 +6800,171 @@ Debug Message: </source> </message> <message> <location filename="../../src/yuzu/main.ui" line="229"/> - <source>&Reinitialize keys...</source> - <translation>釿–°åˆå§‹åŒ–金鑰(&R)...</translation> - </message> - <message> - <location filename="../../src/yuzu/main.ui" line="234"/> <source>&Verify Installed Contents</source> <translation>é©—è‰å·²å®‰è£å…§å®¹çš„完整性 (&V)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="239"/> + <location filename="../../src/yuzu/main.ui" line="234"/> <source>&About yuzu</source> <translation>關於 yuzu(&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="247"/> + <location filename="../../src/yuzu/main.ui" line="242"/> <source>Single &Window Mode</source> <translation>單一視窗模å¼(&W)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="252"/> + <location filename="../../src/yuzu/main.ui" line="247"/> <source>Con&figure...</source> <translation>è¨å®š (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="263"/> + <location filename="../../src/yuzu/main.ui" line="258"/> <source>Display D&ock Widget Headers</source> <translation>顯示 Dock å°å·¥å…·æ¨™é¡Œ (&O)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="271"/> + <location filename="../../src/yuzu/main.ui" line="266"/> <source>Show &Filter Bar</source> <translation>顯示æœå°‹åˆ—(&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="279"/> + <location filename="../../src/yuzu/main.ui" line="274"/> <source>Show &Status Bar</source> <translation>顯示狀態列(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="282"/> + <location filename="../../src/yuzu/main.ui" line="277"/> <source>Show Status Bar</source> <translation>顯示狀態列</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="290"/> + <location filename="../../src/yuzu/main.ui" line="285"/> <source>&Browse Public Game Lobby</source> <translation>ç€è¦½å…¬ç”¨éŠæˆ²å¤§å»³ (&B)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="298"/> + <location filename="../../src/yuzu/main.ui" line="293"/> <source>&Create Room</source> <translation>建立房間 (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="306"/> + <location filename="../../src/yuzu/main.ui" line="301"/> <source>&Leave Room</source> <translation>離開房間 (&L)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="311"/> + <location filename="../../src/yuzu/main.ui" line="306"/> <source>&Direct Connect to Room</source> <translation>直接連線到房間 (&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="319"/> + <location filename="../../src/yuzu/main.ui" line="314"/> <source>&Show Current Room</source> <translation>顯示目å‰çš„æˆ¿é–“ (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="327"/> + <location filename="../../src/yuzu/main.ui" line="322"/> <source>F&ullscreen</source> <translation>全螢幕(&U)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="335"/> + <location filename="../../src/yuzu/main.ui" line="330"/> <source>&Restart</source> <translation>釿–°å•Ÿå‹•(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="343"/> + <location filename="../../src/yuzu/main.ui" line="338"/> <source>Load/Remove &Amiibo...</source> <translation>載入/移除 Amiibo... (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="351"/> + <location filename="../../src/yuzu/main.ui" line="346"/> <source>&Report Compatibility</source> <translation>å›žå ±ç›¸å®¹æ€§(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="359"/> + <location filename="../../src/yuzu/main.ui" line="354"/> <source>Open &Mods Page</source> <translation>模組資訊 (&M)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="364"/> + <location filename="../../src/yuzu/main.ui" line="359"/> <source>Open &Quickstart Guide</source> <translation>快速入門 (&Q)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="369"/> + <location filename="../../src/yuzu/main.ui" line="364"/> <source>&FAQ</source> <translation>常見å•題 (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="374"/> + <location filename="../../src/yuzu/main.ui" line="369"/> <source>Open &yuzu Folder</source> <translation>開啟 yuzu 資料夾(&Y)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="382"/> + <location filename="../../src/yuzu/main.ui" line="377"/> <source>&Capture Screenshot</source> <translation>截圖 (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="387"/> + <location filename="../../src/yuzu/main.ui" line="382"/> <source>Open &Album</source> <translation>開啟相簿 (&A)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="392"/> + <location filename="../../src/yuzu/main.ui" line="387"/> <source>&Set Nickname and Owner</source> <translation>ç™»éŒ„æŒæœ‰è€…和暱稱 (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="397"/> + <location filename="../../src/yuzu/main.ui" line="392"/> <source>&Delete Game Data</source> <translation>æ¸…é™¤éŠæˆ²è³‡æ–™ (&D)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="402"/> + <location filename="../../src/yuzu/main.ui" line="397"/> <source>&Restore Amiibo</source> <translation>復原資料 (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="407"/> + <location filename="../../src/yuzu/main.ui" line="402"/> <source>&Format Amiibo</source> <translation>åˆå§‹åŒ– Amiibo (&F)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="412"/> + <location filename="../../src/yuzu/main.ui" line="407"/> <source>Open &Mii Editor</source> <translation>開啟 &Mii 編輯器</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="417"/> + <location filename="../../src/yuzu/main.ui" line="412"/> <source>&Configure TAS...</source> <translation>è¨å®š &TAS…</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="428"/> + <location filename="../../src/yuzu/main.ui" line="423"/> <source>Configure C&urrent Game...</source> <translation>ç›®å‰éŠæˆ²è¨å®š...(&U)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="439"/> + <location filename="../../src/yuzu/main.ui" line="434"/> <source>&Start</source> <translation>é–‹å§‹(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="447"/> + <location filename="../../src/yuzu/main.ui" line="442"/> <source>&Reset</source> <translation>é‡è¨ (&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="455"/> + <location filename="../../src/yuzu/main.ui" line="450"/> <source>R&ecord</source> <translation>錄製 (&E)</translation> </message> <message> - <location filename="../../src/yuzu/main.ui" line="460"/> + <location filename="../../src/yuzu/main.ui" line="455"/> <source>Open &Controller Menu</source> <translation>打开控制器èœå• (&C)</translation> </message> diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 42355716c..d49a2e43e 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -14,16 +14,17 @@ set(BUILD_SHARED_LIBS OFF) # Skip install rules for all externals set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON) -# xbyak +# Xbyak (also used by Dynarmic, so needs to be added first) if ((ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) AND NOT TARGET xbyak::xbyak) add_subdirectory(xbyak) endif() -# Dynarmic +# Oaknut (also used by Dynarmic, so needs to be added first) if (ARCHITECTURE_arm64 AND NOT TARGET merry::oaknut) add_subdirectory(oaknut) endif() +# Dynarmic if ((ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) AND NOT TARGET dynarmic::dynarmic) set(DYNARMIC_IGNORE_ASSERTS ON) add_subdirectory(dynarmic) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt index 53137b2e2..6ebb46af7 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt @@ -261,7 +261,7 @@ object NativeLibrary { /** * Begins emulation. */ - external fun run(path: String?, programIndex: Int = 0) + external fun run(path: String?, programIndex: Int, frontendInitiated: Boolean) // Surface Handling external fun surfaceChanged(surf: Surface?) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt index 1f591ced1..937b8faf1 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt @@ -927,7 +927,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { emulationThread.join() emulationThread = Thread({ Log.debug("[EmulationFragment] Starting emulation thread.") - NativeLibrary.run(gamePath, programIndex) + NativeLibrary.run(gamePath, programIndex, false) }, "NativeEmulation") emulationThread.start() } @@ -981,7 +981,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { State.STOPPED -> { emulationThread = Thread({ Log.debug("[EmulationFragment] Starting emulation thread.") - NativeLibrary.run(gamePath, programIndex) + NativeLibrary.run(gamePath, programIndex, true) }, "NativeEmulation") emulationThread.start() } diff --git a/src/android/app/src/main/jni/applets/software_keyboard.cpp b/src/android/app/src/main/jni/applets/software_keyboard.cpp index 74e040478..9943483e8 100644 --- a/src/android/app/src/main/jni/applets/software_keyboard.cpp +++ b/src/android/app/src/main/jni/applets/software_keyboard.cpp @@ -82,7 +82,7 @@ AndroidKeyboard::ResultData AndroidKeyboard::ResultData::CreateFromFrontend(jobj const jstring string = reinterpret_cast<jstring>(env->GetObjectField( object, env->GetFieldID(s_keyboard_data_class, "text", "Ljava/lang/String;"))); return ResultData{GetJString(env, string), - static_cast<Service::AM::Applets::SwkbdResult>(env->GetIntField( + static_cast<Service::AM::Frontend::SwkbdResult>(env->GetIntField( object, env->GetFieldID(s_keyboard_data_class, "result", "I")))}; } @@ -149,7 +149,7 @@ void AndroidKeyboard::ShowNormalKeyboard() const { } void AndroidKeyboard::ShowTextCheckDialog( - Service::AM::Applets::SwkbdTextCheckResult text_check_result, + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) const { LOG_WARNING(Frontend, "(STUBBED) called, backend requested to show the text check dialog."); } @@ -204,7 +204,7 @@ void AndroidKeyboard::InlineTextChanged( "\ncursor_position={}", Common::UTF16ToUTF8(text_parameters.input_text), text_parameters.cursor_position); - submit_inline_callback(Service::AM::Applets::SwkbdReplyType::ChangedString, + submit_inline_callback(Service::AM::Frontend::SwkbdReplyType::ChangedString, text_parameters.input_text, text_parameters.cursor_position); } @@ -219,7 +219,7 @@ void AndroidKeyboard::SubmitInlineKeyboardText(std::u16string submitted_text) { m_current_text += submitted_text; - submit_inline_callback(Service::AM::Applets::SwkbdReplyType::ChangedString, m_current_text, + submit_inline_callback(Service::AM::Frontend::SwkbdReplyType::ChangedString, m_current_text, m_current_text.size()); } @@ -236,12 +236,12 @@ void AndroidKeyboard::SubmitInlineKeyboardInput(int key_code) { case KEYCODE_BACK: case KEYCODE_ENTER: m_is_inline_active = false; - submit_inline_callback(Service::AM::Applets::SwkbdReplyType::DecidedEnter, m_current_text, + submit_inline_callback(Service::AM::Frontend::SwkbdReplyType::DecidedEnter, m_current_text, static_cast<s32>(m_current_text.size())); break; case KEYCODE_DEL: m_current_text.pop_back(); - submit_inline_callback(Service::AM::Applets::SwkbdReplyType::ChangedString, m_current_text, + submit_inline_callback(Service::AM::Frontend::SwkbdReplyType::ChangedString, m_current_text, m_current_text.size()); break; } diff --git a/src/android/app/src/main/jni/applets/software_keyboard.h b/src/android/app/src/main/jni/applets/software_keyboard.h index b2fb59b68..2affc01f6 100644 --- a/src/android/app/src/main/jni/applets/software_keyboard.h +++ b/src/android/app/src/main/jni/applets/software_keyboard.h @@ -24,7 +24,7 @@ public: void ShowNormalKeyboard() const override; - void ShowTextCheckDialog(Service::AM::Applets::SwkbdTextCheckResult text_check_result, + void ShowTextCheckDialog(Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) const override; void ShowInlineKeyboard( @@ -45,7 +45,7 @@ private: static ResultData CreateFromFrontend(jobject object); std::string text; - Service::AM::Applets::SwkbdResult result{}; + Service::AM::Frontend::SwkbdResult result{}; }; void SubmitNormalText(const ResultData& result) const; diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 64627db88..654510129 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -42,14 +42,15 @@ #include "core/frontend/applets/cabinet.h" #include "core/frontend/applets/controller.h" #include "core/frontend/applets/error.h" -#include "core/frontend/applets/general_frontend.h" +#include "core/frontend/applets/general.h" #include "core/frontend/applets/mii_edit.h" #include "core/frontend/applets/profile_select.h" #include "core/frontend/applets/software_keyboard.h" #include "core/frontend/applets/web_browser.h" #include "core/hle/service/am/applet_ae.h" +#include "core/hle/service/am/applet_manager.h" #include "core/hle/service/am/applet_oe.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applets.h" #include "core/hle/service/filesystem/filesystem.h" #include "core/loader/loader.h" #include "frontend_common/config.h" @@ -211,8 +212,15 @@ void EmulationSession::InitializeSystem(bool reload) { m_system.GetFileSystemController().CreateFactories(*m_vfs); } +void EmulationSession::SetAppletId(int applet_id) { + m_applet_id = applet_id; + m_system.GetFrontendAppletHolder().SetCurrentAppletId( + static_cast<Service::AM::AppletId>(m_applet_id)); +} + Core::SystemResultStatus EmulationSession::InitializeEmulation(const std::string& filepath, - const std::size_t program_index) { + const std::size_t program_index, + const bool frontend_initiated) { std::scoped_lock lock(m_mutex); // Create the render window. @@ -226,7 +234,7 @@ Core::SystemResultStatus EmulationSession::InitializeEmulation(const std::string m_system.ApplySettings(); Settings::LogSettings(); m_system.HIDCore().ReloadInputDevices(); - m_system.SetAppletFrontendSet({ + m_system.SetFrontendAppletSet({ nullptr, // Amiibo Settings nullptr, // Controller Selector nullptr, // Error Display @@ -242,8 +250,13 @@ Core::SystemResultStatus EmulationSession::InitializeEmulation(const std::string ConfigureFilesystemProvider(filepath); // Load the ROM. - m_load_result = - m_system.Load(EmulationSession::GetInstance().Window(), filepath, 0, program_index); + Service::AM::FrontendAppletParameters params{ + .applet_id = static_cast<Service::AM::AppletId>(m_applet_id), + .launch_type = frontend_initiated ? Service::AM::LaunchType::FrontendInitiated + : Service::AM::LaunchType::ApplicationInitiated, + .program_index = static_cast<s32>(program_index), + }; + m_load_result = m_system.Load(EmulationSession::GetInstance().Window(), filepath, params); if (m_load_result != Core::SystemResultStatus::Success) { return m_load_result; } @@ -339,6 +352,9 @@ void EmulationSession::RunEmulation() { } } } + + // Reset current applet ID. + m_applet_id = static_cast<int>(Service::AM::AppletId::Application); } bool EmulationSession::IsHandheldOnly() { @@ -434,7 +450,8 @@ u64 EmulationSession::GetProgramId(JNIEnv* env, jstring jprogramId) { } static Core::SystemResultStatus RunEmulation(const std::string& filepath, - const size_t program_index = 0) { + const size_t program_index, + const bool frontend_initiated) { MicroProfileOnThreadCreate("EmuThread"); SCOPE_EXIT({ MicroProfileShutdown(); }); @@ -447,7 +464,8 @@ static Core::SystemResultStatus RunEmulation(const std::string& filepath, SCOPE_EXIT({ EmulationSession::GetInstance().ShutdownEmulation(); }); - jconst result = EmulationSession::GetInstance().InitializeEmulation(filepath, program_index); + jconst result = EmulationSession::GetInstance().InitializeEmulation(filepath, program_index, + frontend_initiated); if (result != Core::SystemResultStatus::Success) { return result; } @@ -744,10 +762,12 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_logSettings(JNIEnv* env, jobject jobj } void Java_org_yuzu_yuzu_1emu_NativeLibrary_run(JNIEnv* env, jobject jobj, jstring j_path, - jint j_program_index) { + jint j_program_index, + jboolean j_frontend_initiated) { const std::string path = GetJString(env, j_path); - const Core::SystemResultStatus result{RunEmulation(path, j_program_index)}; + const Core::SystemResultStatus result{ + RunEmulation(path, j_program_index, j_frontend_initiated)}; if (result != Core::SystemResultStatus::Success) { env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), IDCache::GetExitEmulationActivity(), static_cast<int>(result)); @@ -809,13 +829,12 @@ jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getAppletLaunchPath(JNIEnv* env, j void Java_org_yuzu_yuzu_1emu_NativeLibrary_setCurrentAppletId(JNIEnv* env, jclass clazz, jint jappletId) { - EmulationSession::GetInstance().System().GetAppletManager().SetCurrentAppletId( - static_cast<Service::AM::Applets::AppletId>(jappletId)); + EmulationSession::GetInstance().SetAppletId(jappletId); } void Java_org_yuzu_yuzu_1emu_NativeLibrary_setCabinetMode(JNIEnv* env, jclass clazz, jint jcabinetMode) { - EmulationSession::GetInstance().System().GetAppletManager().SetCabinetMode( + EmulationSession::GetInstance().System().GetFrontendAppletHolder().SetCabinetMode( static_cast<Service::NFP::CabinetMode>(jcabinetMode)); } diff --git a/src/android/app/src/main/jni/native.h b/src/android/app/src/main/jni/native.h index bfe3fccca..e49d4e015 100644 --- a/src/android/app/src/main/jni/native.h +++ b/src/android/app/src/main/jni/native.h @@ -45,8 +45,10 @@ public: const Core::PerfStatsResults& PerfStats(); void ConfigureFilesystemProvider(const std::string& filepath); void InitializeSystem(bool reload); + void SetAppletId(int applet_id); Core::SystemResultStatus InitializeEmulation(const std::string& filepath, - const std::size_t program_index = 0); + const std::size_t program_index, + const bool frontend_initiated); bool IsHandheldOnly(); void SetDeviceType([[maybe_unused]] int index, int type); @@ -79,6 +81,7 @@ private: std::atomic<bool> m_is_paused = false; SoftwareKeyboard::AndroidKeyboard* m_software_keyboard{}; std::unique_ptr<FileSys::ManualContentProvider> m_manual_provider; + int m_applet_id{1}; // GPU driver parameters std::shared_ptr<Common::DynamicLibrary> m_vulkan_library; diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index e30fea268..85926fc8f 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -106,6 +106,7 @@ add_library(common STATIC precompiled_headers.h quaternion.h range_map.h + range_mutex.h reader_writer_queue.h ring_buffer.h ${CMAKE_CURRENT_BINARY_DIR}/scm_rev.cpp diff --git a/src/common/range_mutex.h b/src/common/range_mutex.h new file mode 100644 index 000000000..d6c949811 --- /dev/null +++ b/src/common/range_mutex.h @@ -0,0 +1,93 @@ +// SPDX-FileCopyrightText: 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <condition_variable> +#include <mutex> + +#include "common/intrusive_list.h" + +namespace Common { + +class ScopedRangeLock; + +class RangeMutex { +public: + explicit RangeMutex() = default; + ~RangeMutex() = default; + +private: + friend class ScopedRangeLock; + + void Lock(ScopedRangeLock& l); + void Unlock(ScopedRangeLock& l); + bool HasIntersectionLocked(ScopedRangeLock& l); + +private: + std::mutex m_mutex; + std::condition_variable m_cv; + + using LockList = Common::IntrusiveListBaseTraits<ScopedRangeLock>::ListType; + LockList m_list; +}; + +class ScopedRangeLock : public Common::IntrusiveListBaseNode<ScopedRangeLock> { +public: + explicit ScopedRangeLock(RangeMutex& mutex, u64 address, u64 size) + : m_mutex(mutex), m_address(address), m_size(size) { + if (m_size > 0) { + m_mutex.Lock(*this); + } + } + ~ScopedRangeLock() { + if (m_size > 0) { + m_mutex.Unlock(*this); + } + } + + u64 GetAddress() const { + return m_address; + } + + u64 GetSize() const { + return m_size; + } + +private: + RangeMutex& m_mutex; + const u64 m_address{}; + const u64 m_size{}; +}; + +inline void RangeMutex::Lock(ScopedRangeLock& l) { + std::unique_lock lk{m_mutex}; + m_cv.wait(lk, [&] { return !HasIntersectionLocked(l); }); + m_list.push_back(l); +} + +inline void RangeMutex::Unlock(ScopedRangeLock& l) { + { + std::scoped_lock lk{m_mutex}; + m_list.erase(m_list.iterator_to(l)); + } + m_cv.notify_all(); +} + +inline bool RangeMutex::HasIntersectionLocked(ScopedRangeLock& l) { + const auto cur_begin = l.GetAddress(); + const auto cur_last = l.GetAddress() + l.GetSize() - 1; + + for (const auto& other : m_list) { + const auto other_begin = other.GetAddress(); + const auto other_last = other.GetAddress() + other.GetSize() - 1; + + if (cur_begin <= other_last && other_begin <= cur_last) { + return true; + } + } + + return false; +} + +} // namespace Common diff --git a/src/common/settings.h b/src/common/settings.h index 16749ab68..f1b1add56 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -134,12 +134,12 @@ struct Values { Linkage linkage{}; // Audio - Setting<AudioEngine> sink_id{linkage, AudioEngine::Auto, "output_engine", Category::Audio, - Specialization::RuntimeList}; - Setting<std::string> audio_output_device_id{linkage, "auto", "output_device", Category::Audio, - Specialization::RuntimeList}; - Setting<std::string> audio_input_device_id{linkage, "auto", "input_device", Category::Audio, - Specialization::RuntimeList}; + SwitchableSetting<AudioEngine> sink_id{linkage, AudioEngine::Auto, "output_engine", + Category::Audio, Specialization::RuntimeList}; + SwitchableSetting<std::string> audio_output_device_id{ + linkage, "auto", "output_device", Category::Audio, Specialization::RuntimeList}; + SwitchableSetting<std::string> audio_input_device_id{ + linkage, "auto", "input_device", Category::Audio, Specialization::RuntimeList}; SwitchableSetting<AudioMode, true> sound_index{ linkage, AudioMode::Stereo, AudioMode::Mono, AudioMode::Surround, "sound_index", Category::SystemAudio, Specialization::Default, true, diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ea6b2c285..eb8f643a2 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -176,8 +176,8 @@ add_library(core STATIC frontend/applets/controller.h frontend/applets/error.cpp frontend/applets/error.h - frontend/applets/general_frontend.cpp - frontend/applets/general_frontend.h + frontend/applets/general.cpp + frontend/applets/general.h frontend/applets/mii_edit.cpp frontend/applets/mii_edit.h frontend/applets/profile_select.cpp @@ -390,39 +390,101 @@ add_library(core STATIC hle/service/acc/errors.h hle/service/acc/profile_manager.cpp hle/service/acc/profile_manager.h + hle/service/am/frontend/applet_cabinet.cpp + hle/service/am/frontend/applet_cabinet.h + hle/service/am/frontend/applet_controller.cpp + hle/service/am/frontend/applet_controller.h + hle/service/am/frontend/applet_error.cpp + hle/service/am/frontend/applet_error.h + hle/service/am/frontend/applet_general.cpp + hle/service/am/frontend/applet_general.h + hle/service/am/frontend/applet_mii_edit.cpp + hle/service/am/frontend/applet_mii_edit.h + hle/service/am/frontend/applet_mii_edit_types.h + hle/service/am/frontend/applet_profile_select.cpp + hle/service/am/frontend/applet_profile_select.h + hle/service/am/frontend/applet_software_keyboard.cpp + hle/service/am/frontend/applet_software_keyboard.h + hle/service/am/frontend/applet_software_keyboard_types.h + hle/service/am/frontend/applet_web_browser.cpp + hle/service/am/frontend/applet_web_browser.h + hle/service/am/frontend/applet_web_browser_types.h + hle/service/am/frontend/applets.cpp + hle/service/am/frontend/applets.h hle/service/am/am.cpp hle/service/am/am.h + hle/service/am/am_results.h + hle/service/am/am_types.h + hle/service/am/applet.cpp + hle/service/am/applet.h hle/service/am/applet_ae.cpp hle/service/am/applet_ae.h + hle/service/am/applet_manager.cpp + hle/service/am/applet_data_broker.cpp + hle/service/am/applet_data_broker.h + hle/service/am/applet_manager.h hle/service/am/applet_oe.cpp hle/service/am/applet_oe.h - hle/service/am/applets/applet_cabinet.cpp - hle/service/am/applets/applet_cabinet.h - hle/service/am/applets/applet_controller.cpp - hle/service/am/applets/applet_controller.h - hle/service/am/applets/applet_error.cpp - hle/service/am/applets/applet_error.h - hle/service/am/applets/applet_general_backend.cpp - hle/service/am/applets/applet_general_backend.h - hle/service/am/applets/applet_mii_edit.cpp - hle/service/am/applets/applet_mii_edit.h - hle/service/am/applets/applet_mii_edit_types.h - hle/service/am/applets/applet_profile_select.cpp - hle/service/am/applets/applet_profile_select.h - hle/service/am/applets/applet_software_keyboard.cpp - hle/service/am/applets/applet_software_keyboard.h - hle/service/am/applets/applet_software_keyboard_types.h - hle/service/am/applets/applet_web_browser.cpp - hle/service/am/applets/applet_web_browser.h - hle/service/am/applets/applet_web_browser_types.h - hle/service/am/applets/applets.cpp - hle/service/am/applets/applets.h + hle/service/am/applet_common_functions.cpp + hle/service/am/applet_common_functions.h + hle/service/am/applet_message_queue.cpp + hle/service/am/applet_message_queue.h + hle/service/am/application_creator.cpp + hle/service/am/application_creator.h + hle/service/am/application_functions.cpp + hle/service/am/application_functions.h + hle/service/am/application_proxy.cpp + hle/service/am/application_proxy.h + hle/service/am/audio_controller.cpp + hle/service/am/audio_controller.h + hle/service/am/common_state_getter.cpp + hle/service/am/common_state_getter.h + hle/service/am/debug_functions.cpp + hle/service/am/debug_functions.h + hle/service/am/display_controller.cpp + hle/service/am/display_controller.h + hle/service/am/global_state_controller.cpp + hle/service/am/global_state_controller.h + hle/service/am/hid_registration.cpp + hle/service/am/hid_registration.h + hle/service/am/home_menu_functions.cpp + hle/service/am/home_menu_functions.h hle/service/am/idle.cpp hle/service/am/idle.h + hle/service/am/library_applet_accessor.cpp + hle/service/am/library_applet_accessor.h + hle/service/am/library_applet_creator.cpp + hle/service/am/library_applet_creator.h + hle/service/am/library_applet_proxy.cpp + hle/service/am/library_applet_proxy.h + hle/service/am/library_applet_self_accessor.cpp + hle/service/am/library_applet_self_accessor.h + hle/service/am/library_applet_storage.cpp + hle/service/am/library_applet_storage.h + hle/service/am/lock_accessor.cpp + hle/service/am/lock_accessor.h + hle/service/am/managed_layer_holder.cpp + hle/service/am/managed_layer_holder.h hle/service/am/omm.cpp hle/service/am/omm.h + hle/service/am/process_winding_controller.cpp + hle/service/am/process_winding_controller.h + hle/service/am/process.cpp + hle/service/am/process.h + hle/service/am/self_controller.cpp + hle/service/am/self_controller.h + hle/service/am/system_applet_proxy.cpp + hle/service/am/system_applet_proxy.h + hle/service/am/system_buffer_manager.cpp + hle/service/am/system_buffer_manager.h hle/service/am/spsm.cpp hle/service/am/spsm.h + hle/service/am/storage_accessor.cpp + hle/service/am/storage_accessor.h + hle/service/am/storage.cpp + hle/service/am/storage.h + hle/service/am/window_controller.cpp + hle/service/am/window_controller.h hle/service/aoc/aoc_u.cpp hle/service/aoc/aoc_u.h hle/service/apm/apm.cpp @@ -486,6 +548,8 @@ add_library(core STATIC hle/service/es/es.h hle/service/eupld/eupld.cpp hle/service/eupld/eupld.h + hle/service/event.cpp + hle/service/event.h hle/service/fatal/fatal.cpp hle/service/fatal/fatal.h hle/service/fatal/fatal_p.cpp @@ -711,6 +775,9 @@ add_library(core STATIC hle/service/nvnflinger/graphic_buffer_producer.h hle/service/nvnflinger/hos_binder_driver_server.cpp hle/service/nvnflinger/hos_binder_driver_server.h + hle/service/nvnflinger/hardware_composer.cpp + hle/service/nvnflinger/hardware_composer.h + hle/service/nvnflinger/hwc_layer.h hle/service/nvnflinger/nvnflinger.cpp hle/service/nvnflinger/nvnflinger.h hle/service/nvnflinger/parcel.h diff --git a/src/core/core.cpp b/src/core/core.cpp index 11bf8d2f6..435ef6793 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -36,7 +36,8 @@ #include "core/hle/kernel/kernel.h" #include "core/hle/kernel/physical_core.h" #include "core/hle/service/acc/profile_manager.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/applet_manager.h" +#include "core/hle/service/am/frontend/applets.h" #include "core/hle/service/apm/apm_controller.h" #include "core/hle/service/filesystem/filesystem.h" #include "core/hle/service/glue/glue_manager.h" @@ -135,8 +136,8 @@ FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs, struct System::Impl { explicit Impl(System& system) - : kernel{system}, fs_controller{system}, hid_core{}, room_network{}, - cpu_manager{system}, reporter{system}, applet_manager{system}, profile_manager{} {} + : kernel{system}, fs_controller{system}, hid_core{}, room_network{}, cpu_manager{system}, + reporter{system}, applet_manager{system}, frontend_applets{system}, profile_manager{} {} void Initialize(System& system) { device_memory = std::make_unique<Core::DeviceMemory>(); @@ -157,7 +158,7 @@ struct System::Impl { } // Create default implementations of applets if one is not provided. - applet_manager.SetDefaultAppletsIfMissing(); + frontend_applets.SetDefaultAppletsIfMissing(); is_async_gpu = Settings::values.use_asynchronous_gpu_emulation.GetValue(); @@ -330,16 +331,27 @@ struct System::Impl { } SystemResultStatus Load(System& system, Frontend::EmuWindow& emu_window, - const std::string& filepath, u64 program_id, - std::size_t program_index) { + const std::string& filepath, + Service::AM::FrontendAppletParameters& params) { app_loader = Loader::GetLoader(system, GetGameFileFromPath(virtual_filesystem, filepath), - program_id, program_index); + params.program_id, params.program_index); if (!app_loader) { LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); return SystemResultStatus::ErrorGetLoader; } + if (app_loader->ReadProgramId(params.program_id) != Loader::ResultStatus::Success) { + LOG_ERROR(Core, "Failed to find title id for ROM!"); + } + + std::string name = "Unknown program"; + if (app_loader->ReadTitle(name) != Loader::ResultStatus::Success) { + LOG_ERROR(Core, "Failed to read title for ROM!"); + } + + LOG_INFO(Core, "Loading {} ({})", name, params.program_id); + InitializeKernel(system); // Create the application process. @@ -373,9 +385,14 @@ struct System::Impl { cheat_engine->Initialize(); } + // Register with applet manager. + applet_manager.CreateAndInsertByFrontendAppletParameters(main_process->GetProcessId(), + params); + // All threads are started, begin main process execution, now that we're in the clear. main_process->Run(load_parameters->main_thread_priority, load_parameters->main_thread_stack_size); + main_process->Close(); if (Settings::values.gamecard_inserted) { if (Settings::values.gamecard_current_game) { @@ -386,21 +403,13 @@ struct System::Impl { } } - if (app_loader->ReadProgramId(program_id) != Loader::ResultStatus::Success) { - LOG_ERROR(Core, "Failed to find title id for ROM (Error {})", load_result); - } - perf_stats = std::make_unique<PerfStats>(program_id); + perf_stats = std::make_unique<PerfStats>(params.program_id); // Reset counters and set time origin to current frame GetAndResetPerfStats(); perf_stats->BeginSystemFrame(); - std::string name = "Unknown Game"; - if (app_loader->ReadTitle(name) != Loader::ResultStatus::Success) { - LOG_ERROR(Core, "Failed to read title for ROM (Error {})", load_result); - } - std::string title_version; - const FileSys::PatchManager pm(program_id, system.GetFileSystemController(), + const FileSys::PatchManager pm(params.program_id, system.GetFileSystemController(), system.GetContentProvider()); const auto metadata = pm.GetControlMetadata(); if (metadata.first != nullptr) { @@ -409,14 +418,15 @@ struct System::Impl { if (auto room_member = room_network.GetRoomMember().lock()) { Network::GameInfo game_info; game_info.name = name; - game_info.id = program_id; + game_info.id = params.program_id; game_info.version = title_version; room_member->SendGameInfo(game_info); } // Workarounds: // Activate this in Super Smash Brothers Ultimate, it only affects AMD cards using AMDVLK - Settings::values.renderer_amdvlk_depth_bias_workaround = program_id == 0x1006A800016E000ULL; + Settings::values.renderer_amdvlk_depth_bias_workaround = + params.program_id == 0x1006A800016E000ULL; status = SystemResultStatus::Success; return status; @@ -455,6 +465,7 @@ struct System::Impl { } kernel.CloseServices(); kernel.ShutdownCores(); + applet_manager.Reset(); services.reset(); service_manager.reset(); fs_controller.Reset(); @@ -566,8 +577,9 @@ struct System::Impl { std::unique_ptr<Tools::RenderdocAPI> renderdoc_api; - /// Frontend applets - Service::AM::Applets::AppletManager applet_manager; + /// Applets + Service::AM::AppletManager applet_manager; + Service::AM::Frontend::FrontendAppletHolder frontend_applets; /// APM (Performance) services Service::APM::Controller apm_controller{core_timing}; @@ -680,8 +692,8 @@ void System::InitializeDebugger() { } SystemResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath, - u64 program_id, std::size_t program_index) { - return impl->Load(*this, emu_window, filepath, program_id, program_index); + Service::AM::FrontendAppletParameters& params) { + return impl->Load(*this, emu_window, filepath, params); } bool System::IsPoweredOn() const { @@ -871,19 +883,19 @@ void System::RegisterCheatList(const std::vector<Memory::CheatEntry>& list, impl->cheat_engine->SetMainMemoryParameters(main_region_begin, main_region_size); } -void System::SetAppletFrontendSet(Service::AM::Applets::AppletFrontendSet&& set) { - impl->applet_manager.SetAppletFrontendSet(std::move(set)); +void System::SetFrontendAppletSet(Service::AM::Frontend::FrontendAppletSet&& set) { + impl->frontend_applets.SetFrontendAppletSet(std::move(set)); } -void System::SetDefaultAppletFrontendSet() { - impl->applet_manager.SetDefaultAppletFrontendSet(); +Service::AM::Frontend::FrontendAppletHolder& System::GetFrontendAppletHolder() { + return impl->frontend_applets; } -Service::AM::Applets::AppletManager& System::GetAppletManager() { - return impl->applet_manager; +const Service::AM::Frontend::FrontendAppletHolder& System::GetFrontendAppletHolder() const { + return impl->frontend_applets; } -const Service::AM::Applets::AppletManager& System::GetAppletManager() const { +Service::AM::AppletManager& System::GetAppletManager() { return impl->applet_manager; } diff --git a/src/core/core.h b/src/core/core.h index d8862e9ce..90826bd3a 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -50,10 +50,15 @@ namespace Account { class ProfileManager; } // namespace Account -namespace AM::Applets { -struct AppletFrontendSet; +namespace AM { +struct FrontendAppletParameters; class AppletManager; -} // namespace AM::Applets +} // namespace AM + +namespace AM::Frontend { +struct FrontendAppletSet; +class FrontendAppletHolder; +} // namespace AM::Frontend namespace APM { class Controller; @@ -203,8 +208,8 @@ public: * @returns SystemResultStatus code, indicating if the operation succeeded. */ [[nodiscard]] SystemResultStatus Load(Frontend::EmuWindow& emu_window, - const std::string& filepath, u64 program_id = 0, - std::size_t program_index = 0); + const std::string& filepath, + Service::AM::FrontendAppletParameters& params); /** * Indicates if the emulated system is powered on (all subsystems initialized and able to run an @@ -344,11 +349,13 @@ public: const std::array<u8, 0x20>& build_id, u64 main_region_begin, u64 main_region_size); - void SetAppletFrontendSet(Service::AM::Applets::AppletFrontendSet&& set); - void SetDefaultAppletFrontendSet(); + void SetFrontendAppletSet(Service::AM::Frontend::FrontendAppletSet&& set); + + [[nodiscard]] Service::AM::Frontend::FrontendAppletHolder& GetFrontendAppletHolder(); + [[nodiscard]] const Service::AM::Frontend::FrontendAppletHolder& GetFrontendAppletHolder() + const; - [[nodiscard]] Service::AM::Applets::AppletManager& GetAppletManager(); - [[nodiscard]] const Service::AM::Applets::AppletManager& GetAppletManager() const; + [[nodiscard]] Service::AM::AppletManager& GetAppletManager(); void SetContentProvider(std::unique_ptr<FileSys::ContentProviderUnion> provider); diff --git a/src/core/device_memory_manager.h b/src/core/device_memory_manager.h index ffeed46cc..0568a821b 100644 --- a/src/core/device_memory_manager.h +++ b/src/core/device_memory_manager.h @@ -5,11 +5,13 @@ #include <array> #include <atomic> +#include <bit> #include <deque> #include <memory> #include <mutex> #include "common/common_types.h" +#include "common/range_mutex.h" #include "common/scratch_buffer.h" #include "common/virtual_buffer.h" @@ -180,31 +182,35 @@ private: } Common::VirtualBuffer<VAddr> cpu_backing_address; - static constexpr size_t subentries = 8 / sizeof(u8); + using CounterType = u8; + using CounterAtomicType = std::atomic_uint8_t; + static constexpr size_t subentries = 8 / sizeof(CounterType); static constexpr size_t subentries_mask = subentries - 1; + static constexpr size_t subentries_shift = + std::countr_zero(sizeof(u64)) - std::countr_zero(sizeof(CounterType)); class CounterEntry final { public: CounterEntry() = default; - std::atomic_uint8_t& Count(std::size_t page) { + CounterAtomicType& Count(std::size_t page) { return values[page & subentries_mask]; } - const std::atomic_uint8_t& Count(std::size_t page) const { + const CounterAtomicType& Count(std::size_t page) const { return values[page & subentries_mask]; } private: - std::array<std::atomic_uint8_t, subentries> values{}; + std::array<CounterAtomicType, subentries> values{}; }; - static_assert(sizeof(CounterEntry) == subentries * sizeof(u8), + static_assert(sizeof(CounterEntry) == subentries * sizeof(CounterType), "CounterEntry should be 8 bytes!"); static constexpr size_t num_counter_entries = (1ULL << (device_virtual_bits - page_bits)) / subentries; using CachedPages = std::array<CounterEntry, num_counter_entries>; std::unique_ptr<CachedPages> cached_pages; - std::mutex counter_guard; + Common::RangeMutex counter_guard; std::mutex mapping_guard; }; diff --git a/src/core/device_memory_manager.inc b/src/core/device_memory_manager.inc index eab8a2731..b026f4220 100644 --- a/src/core/device_memory_manager.inc +++ b/src/core/device_memory_manager.inc @@ -213,8 +213,8 @@ void DeviceMemoryManager<Traits>::Free(DAddr start, size_t size) { } template <typename Traits> -void DeviceMemoryManager<Traits>::Map(DAddr address, VAddr virtual_address, size_t size, - Asid asid, bool track) { +void DeviceMemoryManager<Traits>::Map(DAddr address, VAddr virtual_address, size_t size, Asid asid, + bool track) { Core::Memory::Memory* process_memory = registered_processes[asid.id]; size_t start_page_d = address >> Memory::YUZU_PAGEBITS; size_t num_pages = Common::AlignUp(size, Memory::YUZU_PAGESIZE) >> Memory::YUZU_PAGEBITS; @@ -508,12 +508,7 @@ void DeviceMemoryManager<Traits>::UnregisterProcess(Asid asid) { template <typename Traits> void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size, s32 delta) { - std::unique_lock<std::mutex> lk(counter_guard, std::defer_lock); - const auto Lock = [&] { - if (!lk) { - lk.lock(); - } - }; + Common::ScopedRangeLock lk(counter_guard, addr, size); u64 uncache_begin = 0; u64 cache_begin = 0; u64 uncache_bytes = 0; @@ -524,22 +519,36 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size const size_t page_end = Common::DivCeil(addr + size, Memory::YUZU_PAGESIZE); size_t page = addr >> Memory::YUZU_PAGEBITS; auto [asid, base_vaddress] = ExtractCPUBacking(page); - size_t vpage = base_vaddress >> Memory::YUZU_PAGEBITS; auto* memory_device_inter = registered_processes[asid.id]; + const auto release_pending = [&] { + if (uncache_bytes > 0) { + MarkRegionCaching(memory_device_inter, uncache_begin << Memory::YUZU_PAGEBITS, + uncache_bytes, false); + uncache_bytes = 0; + } + if (cache_bytes > 0) { + MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, + cache_bytes, true); + cache_bytes = 0; + } + }; for (; page != page_end; ++page) { - std::atomic_uint8_t& count = cached_pages->at(page >> 3).Count(page); + CounterAtomicType& count = cached_pages->at(page >> subentries_shift).Count(page); + auto [asid_2, vpage] = ExtractCPUBacking(page); + vpage >>= Memory::YUZU_PAGEBITS; - if (delta > 0) { - ASSERT_MSG(count.load(std::memory_order::relaxed) < std::numeric_limits<u8>::max(), - "Count may overflow!"); - } else if (delta < 0) { - ASSERT_MSG(count.load(std::memory_order::relaxed) > 0, "Count may underflow!"); - } else { - ASSERT_MSG(false, "Delta must be non-zero!"); + if (vpage == 0) [[unlikely]] { + release_pending(); + continue; + } + + if (asid.id != asid_2.id) [[unlikely]] { + release_pending(); + memory_device_inter = registered_processes[asid_2.id]; } // Adds or subtracts 1, as count is a unsigned 8-bit value - count.fetch_add(static_cast<u8>(delta), std::memory_order_release); + count.fetch_add(static_cast<CounterType>(delta), std::memory_order_release); // Assume delta is either -1 or 1 if (count.load(std::memory_order::relaxed) == 0) { @@ -548,7 +557,6 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size } uncache_bytes += Memory::YUZU_PAGESIZE; } else if (uncache_bytes > 0) { - Lock(); MarkRegionCaching(memory_device_inter, uncache_begin << Memory::YUZU_PAGEBITS, uncache_bytes, false); uncache_bytes = 0; @@ -559,23 +567,12 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size } cache_bytes += Memory::YUZU_PAGESIZE; } else if (cache_bytes > 0) { - Lock(); - MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, cache_bytes, - true); + MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, + cache_bytes, true); cache_bytes = 0; } - vpage++; - } - if (uncache_bytes > 0) { - Lock(); - MarkRegionCaching(memory_device_inter, uncache_begin << Memory::YUZU_PAGEBITS, uncache_bytes, - false); - } - if (cache_bytes > 0) { - Lock(); - MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, cache_bytes, - true); } + release_pending(); } } // namespace Core diff --git a/src/core/frontend/applets/general_frontend.cpp b/src/core/frontend/applets/general.cpp index b4b213a31..4c299ee9c 100644 --- a/src/core/frontend/applets/general_frontend.cpp +++ b/src/core/frontend/applets/general.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "common/logging/log.h" -#include "core/frontend/applets/general_frontend.h" +#include "core/frontend/applets/general.h" namespace Core::Frontend { diff --git a/src/core/frontend/applets/general_frontend.h b/src/core/frontend/applets/general.h index 319838ac7..319838ac7 100644 --- a/src/core/frontend/applets/general_frontend.h +++ b/src/core/frontend/applets/general.h diff --git a/src/core/frontend/applets/profile_select.h b/src/core/frontend/applets/profile_select.h index 92e2737ea..880b69ad6 100644 --- a/src/core/frontend/applets/profile_select.h +++ b/src/core/frontend/applets/profile_select.h @@ -8,15 +8,15 @@ #include "common/uuid.h" #include "core/frontend/applets/applet.h" -#include "core/hle/service/am/applets/applet_profile_select.h" +#include "core/hle/service/am/frontend/applet_profile_select.h" namespace Core::Frontend { struct ProfileSelectParameters { - Service::AM::Applets::UiMode mode; + Service::AM::Frontend::UiMode mode; std::array<Common::UUID, 8> invalid_uid_list; - Service::AM::Applets::UiSettingsDisplayOptions display_options; - Service::AM::Applets::UserSelectionPurpose purpose; + Service::AM::Frontend::UiSettingsDisplayOptions display_options; + Service::AM::Frontend::UserSelectionPurpose purpose; }; class ProfileSelectApplet : public Applet { diff --git a/src/core/frontend/applets/software_keyboard.cpp b/src/core/frontend/applets/software_keyboard.cpp index 7655d215b..d00da8ac9 100644 --- a/src/core/frontend/applets/software_keyboard.cpp +++ b/src/core/frontend/applets/software_keyboard.cpp @@ -69,7 +69,7 @@ void DefaultSoftwareKeyboardApplet::ShowNormalKeyboard() const { } void DefaultSoftwareKeyboardApplet::ShowTextCheckDialog( - Service::AM::Applets::SwkbdTextCheckResult text_check_result, + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) const { LOG_WARNING(Service_AM, "(STUBBED) called, backend requested to show the text check dialog."); } @@ -118,7 +118,7 @@ void DefaultSoftwareKeyboardApplet::InlineTextChanged(InlineTextParameters text_ "\ncursor_position={}", Common::UTF16ToUTF8(text_parameters.input_text), text_parameters.cursor_position); - submit_inline_callback(Service::AM::Applets::SwkbdReplyType::ChangedString, + submit_inline_callback(Service::AM::Frontend::SwkbdReplyType::ChangedString, text_parameters.input_text, text_parameters.cursor_position); } @@ -127,22 +127,22 @@ void DefaultSoftwareKeyboardApplet::ExitKeyboard() const { } void DefaultSoftwareKeyboardApplet::SubmitNormalText(std::u16string text) const { - submit_normal_callback(Service::AM::Applets::SwkbdResult::Ok, text, true); + submit_normal_callback(Service::AM::Frontend::SwkbdResult::Ok, text, true); } void DefaultSoftwareKeyboardApplet::SubmitInlineText(std::u16string_view text) const { std::this_thread::sleep_for(std::chrono::milliseconds(500)); for (std::size_t index = 0; index < text.size(); ++index) { - submit_inline_callback(Service::AM::Applets::SwkbdReplyType::ChangedString, + submit_inline_callback(Service::AM::Frontend::SwkbdReplyType::ChangedString, std::u16string(text.data(), text.data() + index + 1), static_cast<s32>(index) + 1); std::this_thread::sleep_for(std::chrono::milliseconds(250)); } - submit_inline_callback(Service::AM::Applets::SwkbdReplyType::DecidedEnter, std::u16string(text), - static_cast<s32>(text.size())); + submit_inline_callback(Service::AM::Frontend::SwkbdReplyType::DecidedEnter, + std::u16string(text), static_cast<s32>(text.size())); } } // namespace Core::Frontend diff --git a/src/core/frontend/applets/software_keyboard.h b/src/core/frontend/applets/software_keyboard.h index 8ed96da24..a32a98e4c 100644 --- a/src/core/frontend/applets/software_keyboard.h +++ b/src/core/frontend/applets/software_keyboard.h @@ -8,7 +8,7 @@ #include "common/common_types.h" #include "core/frontend/applets/applet.h" -#include "core/hle/service/am/applets/applet_software_keyboard_types.h" +#include "core/hle/service/am/frontend/applet_software_keyboard_types.h" namespace Core::Frontend { @@ -23,10 +23,10 @@ struct KeyboardInitializeParameters { u32 max_text_length; u32 min_text_length; s32 initial_cursor_position; - Service::AM::Applets::SwkbdType type; - Service::AM::Applets::SwkbdPasswordMode password_mode; - Service::AM::Applets::SwkbdTextDrawType text_draw_type; - Service::AM::Applets::SwkbdKeyDisableFlags key_disable_flags; + Service::AM::Frontend::SwkbdType type; + Service::AM::Frontend::SwkbdPasswordMode password_mode; + Service::AM::Frontend::SwkbdTextDrawType text_draw_type; + Service::AM::Frontend::SwkbdKeyDisableFlags key_disable_flags; bool use_blur_background; bool enable_backspace_button; bool enable_return_button; @@ -40,8 +40,8 @@ struct InlineAppearParameters { f32 key_top_scale_y; f32 key_top_translate_x; f32 key_top_translate_y; - Service::AM::Applets::SwkbdType type; - Service::AM::Applets::SwkbdKeyDisableFlags key_disable_flags; + Service::AM::Frontend::SwkbdType type; + Service::AM::Frontend::SwkbdKeyDisableFlags key_disable_flags; bool key_top_as_floating; bool enable_backspace_button; bool enable_return_button; @@ -56,9 +56,9 @@ struct InlineTextParameters { class SoftwareKeyboardApplet : public Applet { public: using SubmitInlineCallback = - std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>; + std::function<void(Service::AM::Frontend::SwkbdReplyType, std::u16string, s32)>; using SubmitNormalCallback = - std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>; + std::function<void(Service::AM::Frontend::SwkbdResult, std::u16string, bool)>; virtual ~SoftwareKeyboardApplet(); @@ -69,7 +69,7 @@ public: virtual void ShowNormalKeyboard() const = 0; - virtual void ShowTextCheckDialog(Service::AM::Applets::SwkbdTextCheckResult text_check_result, + virtual void ShowTextCheckDialog(Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) const = 0; virtual void ShowInlineKeyboard(InlineAppearParameters appear_parameters) const = 0; @@ -93,7 +93,7 @@ public: void ShowNormalKeyboard() const override; - void ShowTextCheckDialog(Service::AM::Applets::SwkbdTextCheckResult text_check_result, + void ShowTextCheckDialog(Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) const override; void ShowInlineKeyboard(InlineAppearParameters appear_parameters) const override; diff --git a/src/core/frontend/applets/web_browser.cpp b/src/core/frontend/applets/web_browser.cpp index 6e703ef06..eca8d6d98 100644 --- a/src/core/frontend/applets/web_browser.cpp +++ b/src/core/frontend/applets/web_browser.cpp @@ -18,7 +18,7 @@ void DefaultWebBrowserApplet::OpenLocalWebPage(const std::string& local_url, LOG_WARNING(Service_AM, "(STUBBED) called, backend requested to open local web page at {}", local_url); - callback(Service::AM::Applets::WebExitReason::WindowClosed, "http://localhost/"); + callback(Service::AM::Frontend::WebExitReason::WindowClosed, "http://localhost/"); } void DefaultWebBrowserApplet::OpenExternalWebPage(const std::string& external_url, @@ -26,7 +26,7 @@ void DefaultWebBrowserApplet::OpenExternalWebPage(const std::string& external_ur LOG_WARNING(Service_AM, "(STUBBED) called, backend requested to open external web page at {}", external_url); - callback(Service::AM::Applets::WebExitReason::WindowClosed, "http://localhost/"); + callback(Service::AM::Frontend::WebExitReason::WindowClosed, "http://localhost/"); } } // namespace Core::Frontend diff --git a/src/core/frontend/applets/web_browser.h b/src/core/frontend/applets/web_browser.h index 178bbdd3f..b70856a22 100644 --- a/src/core/frontend/applets/web_browser.h +++ b/src/core/frontend/applets/web_browser.h @@ -6,7 +6,7 @@ #include <functional> #include "core/frontend/applets/applet.h" -#include "core/hle/service/am/applets/applet_web_browser_types.h" +#include "core/hle/service/am/frontend/applet_web_browser_types.h" namespace Core::Frontend { @@ -14,7 +14,7 @@ class WebBrowserApplet : public Applet { public: using ExtractROMFSCallback = std::function<void()>; using OpenWebPageCallback = - std::function<void(Service::AM::Applets::WebExitReason, std::string)>; + std::function<void(Service::AM::Frontend::WebExitReason, std::string)>; virtual ~WebBrowserApplet(); diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index f3683cdcc..34b25be66 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -97,8 +97,14 @@ struct KernelCore::Impl { RegisterHostThread(nullptr); } - void TerminateApplicationProcess() { - application_process.load()->Terminate(); + void TerminateAllProcesses() { + std::scoped_lock lk{process_list_lock}; + for (auto& process : process_list) { + process->Terminate(); + process->Close(); + process = nullptr; + } + process_list.clear(); } void Shutdown() { @@ -107,18 +113,9 @@ struct KernelCore::Impl { CloseServices(); - auto* old_process = application_process.exchange(nullptr); - if (old_process) { - old_process->Close(); - } - - { - std::scoped_lock lk{process_list_lock}; - for (auto* const process : process_list) { - process->Terminate(); - process->Close(); - } - process_list.clear(); + if (application_process) { + application_process->Close(); + application_process = nullptr; } next_object_id = 0; @@ -354,6 +351,7 @@ struct KernelCore::Impl { void MakeApplicationProcess(KProcess* process) { application_process = process; + application_process->Open(); } static inline thread_local u8 host_thread_id = UINT8_MAX; @@ -779,7 +777,7 @@ struct KernelCore::Impl { // Lists all processes that exist in the current session. std::mutex process_list_lock; std::vector<KProcess*> process_list; - std::atomic<KProcess*> application_process{}; + KProcess* application_process{}; std::unique_ptr<Kernel::GlobalSchedulerContext> global_scheduler_context; std::unique_ptr<Kernel::KHardwareTimer> hardware_timer; @@ -1243,7 +1241,7 @@ void KernelCore::SuspendApplication(bool suspended) { } void KernelCore::ShutdownCores() { - impl->TerminateApplicationProcess(); + impl->TerminateAllProcesses(); KScopedSchedulerLock lk{*this}; diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 38f67adcd..8f90eba34 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -1,2704 +1,27 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include <algorithm> -#include <array> -#include <cinttypes> -#include <cstring> -#include "common/settings.h" -#include "common/settings_enums.h" -#include "core/core.h" -#include "core/core_timing.h" -#include "core/file_sys/control_metadata.h" -#include "core/file_sys/patch_manager.h" -#include "core/file_sys/registered_cache.h" -#include "core/file_sys/savedata_factory.h" -#include "core/hle/kernel/k_event.h" -#include "core/hle/kernel/k_transfer_memory.h" -#include "core/hle/result.h" -#include "core/hle/service/acc/profile_manager.h" #include "core/hle/service/am/am.h" #include "core/hle/service/am/applet_ae.h" #include "core/hle/service/am/applet_oe.h" -#include "core/hle/service/am/applets/applet_cabinet.h" -#include "core/hle/service/am/applets/applet_controller.h" -#include "core/hle/service/am/applets/applet_mii_edit_types.h" -#include "core/hle/service/am/applets/applet_profile_select.h" -#include "core/hle/service/am/applets/applet_software_keyboard_types.h" -#include "core/hle/service/am/applets/applet_web_browser.h" -#include "core/hle/service/am/applets/applets.h" #include "core/hle/service/am/idle.h" #include "core/hle/service/am/omm.h" #include "core/hle/service/am/spsm.h" -#include "core/hle/service/apm/apm_controller.h" -#include "core/hle/service/apm/apm_interface.h" -#include "core/hle/service/bcat/backend/backend.h" -#include "core/hle/service/caps/caps_su.h" -#include "core/hle/service/caps/caps_types.h" -#include "core/hle/service/filesystem/filesystem.h" -#include "core/hle/service/filesystem/save_data_controller.h" -#include "core/hle/service/ipc_helpers.h" -#include "core/hle/service/ns/ns.h" -#include "core/hle/service/nvnflinger/fb_share_buffer_manager.h" -#include "core/hle/service/nvnflinger/nvnflinger.h" -#include "core/hle/service/pm/pm.h" #include "core/hle/service/server_manager.h" -#include "core/hle/service/sm/sm.h" -#include "core/hle/service/vi/vi.h" -#include "core/hle/service/vi/vi_results.h" -#include "core/memory.h" -#include "hid_core/hid_types.h" -#include "hid_core/resources/npad/npad.h" namespace Service::AM { -constexpr Result ResultNoDataInChannel{ErrorModule::AM, 2}; -constexpr Result ResultNoMessages{ErrorModule::AM, 3}; -constexpr Result ResultInvalidOffset{ErrorModule::AM, 503}; - -enum class LaunchParameterKind : u32 { - UserChannel = 1, - AccountPreselectedUser = 2, -}; - -constexpr u32 LAUNCH_PARAMETER_ACCOUNT_PRESELECTED_USER_MAGIC = 0xC79497CA; - -struct LaunchParameterAccountPreselectedUser { - u32_le magic; - u32_le is_account_selected; - Common::UUID current_user; - INSERT_PADDING_BYTES(0x70); -}; -static_assert(sizeof(LaunchParameterAccountPreselectedUser) == 0x88); - -IWindowController::IWindowController(Core::System& system_) - : ServiceFramework{system_, "IWindowController"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, nullptr, "CreateWindow"}, - {1, &IWindowController::GetAppletResourceUserId, "GetAppletResourceUserId"}, - {2, &IWindowController::GetAppletResourceUserIdOfCallerApplet, "GetAppletResourceUserIdOfCallerApplet"}, - {10, &IWindowController::AcquireForegroundRights, "AcquireForegroundRights"}, - {11, nullptr, "ReleaseForegroundRights"}, - {12, nullptr, "RejectToChangeIntoBackground"}, - {20, nullptr, "SetAppletWindowVisibility"}, - {21, nullptr, "SetAppletGpuTimeSlice"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IWindowController::~IWindowController() = default; - -void IWindowController::GetAppletResourceUserId(HLERequestContext& ctx) { - const u64 process_id = system.ApplicationProcess()->GetProcessId(); - - LOG_DEBUG(Service_AM, "called. Process ID=0x{:016X}", process_id); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push<u64>(process_id); -} - -void IWindowController::GetAppletResourceUserIdOfCallerApplet(HLERequestContext& ctx) { - const u64 process_id = 0; - - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push<u64>(process_id); -} - -void IWindowController::AcquireForegroundRights(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -IAudioController::IAudioController(Core::System& system_) - : ServiceFramework{system_, "IAudioController"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &IAudioController::SetExpectedMasterVolume, "SetExpectedMasterVolume"}, - {1, &IAudioController::GetMainAppletExpectedMasterVolume, "GetMainAppletExpectedMasterVolume"}, - {2, &IAudioController::GetLibraryAppletExpectedMasterVolume, "GetLibraryAppletExpectedMasterVolume"}, - {3, &IAudioController::ChangeMainAppletMasterVolume, "ChangeMainAppletMasterVolume"}, - {4, &IAudioController::SetTransparentAudioRate, "SetTransparentVolumeRate"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IAudioController::~IAudioController() = default; - -void IAudioController::SetExpectedMasterVolume(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const float main_applet_volume_tmp = rp.Pop<float>(); - const float library_applet_volume_tmp = rp.Pop<float>(); - - LOG_DEBUG(Service_AM, "called. main_applet_volume={}, library_applet_volume={}", - main_applet_volume_tmp, library_applet_volume_tmp); - - // Ensure the volume values remain within the 0-100% range - main_applet_volume = std::clamp(main_applet_volume_tmp, min_allowed_volume, max_allowed_volume); - library_applet_volume = - std::clamp(library_applet_volume_tmp, min_allowed_volume, max_allowed_volume); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IAudioController::GetMainAppletExpectedMasterVolume(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called. main_applet_volume={}", main_applet_volume); - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(main_applet_volume); -} - -void IAudioController::GetLibraryAppletExpectedMasterVolume(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called. library_applet_volume={}", library_applet_volume); - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(library_applet_volume); -} - -void IAudioController::ChangeMainAppletMasterVolume(HLERequestContext& ctx) { - struct Parameters { - float volume; - s64 fade_time_ns; - }; - static_assert(sizeof(Parameters) == 16); - - IPC::RequestParser rp{ctx}; - const auto parameters = rp.PopRaw<Parameters>(); - - LOG_DEBUG(Service_AM, "called. volume={}, fade_time_ns={}", parameters.volume, - parameters.fade_time_ns); - - main_applet_volume = std::clamp(parameters.volume, min_allowed_volume, max_allowed_volume); - fade_time_ns = std::chrono::nanoseconds{parameters.fade_time_ns}; - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IAudioController::SetTransparentAudioRate(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const float transparent_volume_rate_tmp = rp.Pop<float>(); - - LOG_DEBUG(Service_AM, "called. transparent_volume_rate={}", transparent_volume_rate_tmp); - - // Clamp volume range to 0-100%. - transparent_volume_rate = - std::clamp(transparent_volume_rate_tmp, min_allowed_volume, max_allowed_volume); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -IDisplayController::IDisplayController(Core::System& system_) - : ServiceFramework{system_, "IDisplayController"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, nullptr, "GetLastForegroundCaptureImage"}, - {1, nullptr, "UpdateLastForegroundCaptureImage"}, - {2, nullptr, "GetLastApplicationCaptureImage"}, - {3, nullptr, "GetCallerAppletCaptureImage"}, - {4, nullptr, "UpdateCallerAppletCaptureImage"}, - {5, nullptr, "GetLastForegroundCaptureImageEx"}, - {6, nullptr, "GetLastApplicationCaptureImageEx"}, - {7, &IDisplayController::GetCallerAppletCaptureImageEx, "GetCallerAppletCaptureImageEx"}, - {8, &IDisplayController::TakeScreenShotOfOwnLayer, "TakeScreenShotOfOwnLayer"}, - {9, nullptr, "CopyBetweenCaptureBuffers"}, - {10, nullptr, "AcquireLastApplicationCaptureBuffer"}, - {11, nullptr, "ReleaseLastApplicationCaptureBuffer"}, - {12, nullptr, "AcquireLastForegroundCaptureBuffer"}, - {13, nullptr, "ReleaseLastForegroundCaptureBuffer"}, - {14, nullptr, "AcquireCallerAppletCaptureBuffer"}, - {15, nullptr, "ReleaseCallerAppletCaptureBuffer"}, - {16, nullptr, "AcquireLastApplicationCaptureBufferEx"}, - {17, nullptr, "AcquireLastForegroundCaptureBufferEx"}, - {18, nullptr, "AcquireCallerAppletCaptureBufferEx"}, - {20, nullptr, "ClearCaptureBuffer"}, - {21, nullptr, "ClearAppletTransitionBuffer"}, - {22, nullptr, "AcquireLastApplicationCaptureSharedBuffer"}, - {23, nullptr, "ReleaseLastApplicationCaptureSharedBuffer"}, - {24, &IDisplayController::AcquireLastForegroundCaptureSharedBuffer, "AcquireLastForegroundCaptureSharedBuffer"}, - {25, &IDisplayController::ReleaseLastForegroundCaptureSharedBuffer, "ReleaseLastForegroundCaptureSharedBuffer"}, - {26, &IDisplayController::AcquireCallerAppletCaptureSharedBuffer, "AcquireCallerAppletCaptureSharedBuffer"}, - {27, &IDisplayController::ReleaseCallerAppletCaptureSharedBuffer, "ReleaseCallerAppletCaptureSharedBuffer"}, - {28, nullptr, "TakeScreenShotOfOwnLayerEx"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IDisplayController::~IDisplayController() = default; - -void IDisplayController::GetCallerAppletCaptureImageEx(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push(1u); - rb.Push(0); -} - -void IDisplayController::TakeScreenShotOfOwnLayer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IDisplayController::AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push(1U); - rb.Push(0); -} - -void IDisplayController::ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IDisplayController::AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push(1U); - rb.Push(0); -} - -void IDisplayController::ReleaseCallerAppletCaptureSharedBuffer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -IDebugFunctions::IDebugFunctions(Core::System& system_) - : ServiceFramework{system_, "IDebugFunctions"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, nullptr, "NotifyMessageToHomeMenuForDebug"}, - {1, nullptr, "OpenMainApplication"}, - {10, nullptr, "PerformSystemButtonPressing"}, - {20, nullptr, "InvalidateTransitionLayer"}, - {30, nullptr, "RequestLaunchApplicationWithUserAndArgumentForDebug"}, - {31, nullptr, "RequestLaunchApplicationByApplicationLaunchInfoForDebug"}, - {40, nullptr, "GetAppletResourceUsageInfo"}, - {50, nullptr, "AddSystemProgramIdAndAppletIdForDebug"}, - {51, nullptr, "AddOperationConfirmedLibraryAppletIdForDebug"}, - {100, nullptr, "SetCpuBoostModeForApplet"}, - {101, nullptr, "CancelCpuBoostModeForApplet"}, - {110, nullptr, "PushToAppletBoundChannelForDebug"}, - {111, nullptr, "TryPopFromAppletBoundChannelForDebug"}, - {120, nullptr, "AlarmSettingNotificationEnableAppEventReserve"}, - {121, nullptr, "AlarmSettingNotificationDisableAppEventReserve"}, - {122, nullptr, "AlarmSettingNotificationPushAppEventNotify"}, - {130, nullptr, "FriendInvitationSetApplicationParameter"}, - {131, nullptr, "FriendInvitationClearApplicationParameter"}, - {132, nullptr, "FriendInvitationPushApplicationParameter"}, - {140, nullptr, "RestrictPowerOperationForSecureLaunchModeForDebug"}, - {200, nullptr, "CreateFloatingLibraryAppletAccepterForDebug"}, - {300, nullptr, "TerminateAllRunningApplicationsForDebug"}, - {900, nullptr, "GetGrcProcessLaunchedSystemEvent"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IDebugFunctions::~IDebugFunctions() = default; - -ISelfController::ISelfController(Core::System& system_, Nvnflinger::Nvnflinger& nvnflinger_) - : ServiceFramework{system_, "ISelfController"}, nvnflinger{nvnflinger_}, - service_context{system, "ISelfController"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &ISelfController::Exit, "Exit"}, - {1, &ISelfController::LockExit, "LockExit"}, - {2, &ISelfController::UnlockExit, "UnlockExit"}, - {3, &ISelfController::EnterFatalSection, "EnterFatalSection"}, - {4, &ISelfController::LeaveFatalSection, "LeaveFatalSection"}, - {9, &ISelfController::GetLibraryAppletLaunchableEvent, "GetLibraryAppletLaunchableEvent"}, - {10, &ISelfController::SetScreenShotPermission, "SetScreenShotPermission"}, - {11, &ISelfController::SetOperationModeChangedNotification, "SetOperationModeChangedNotification"}, - {12, &ISelfController::SetPerformanceModeChangedNotification, "SetPerformanceModeChangedNotification"}, - {13, &ISelfController::SetFocusHandlingMode, "SetFocusHandlingMode"}, - {14, &ISelfController::SetRestartMessageEnabled, "SetRestartMessageEnabled"}, - {15, nullptr, "SetScreenShotAppletIdentityInfo"}, - {16, &ISelfController::SetOutOfFocusSuspendingEnabled, "SetOutOfFocusSuspendingEnabled"}, - {17, nullptr, "SetControllerFirmwareUpdateSection"}, - {18, nullptr, "SetRequiresCaptureButtonShortPressedMessage"}, - {19, &ISelfController::SetAlbumImageOrientation, "SetAlbumImageOrientation"}, - {20, nullptr, "SetDesirableKeyboardLayout"}, - {21, nullptr, "GetScreenShotProgramId"}, - {40, &ISelfController::CreateManagedDisplayLayer, "CreateManagedDisplayLayer"}, - {41, &ISelfController::IsSystemBufferSharingEnabled, "IsSystemBufferSharingEnabled"}, - {42, &ISelfController::GetSystemSharedLayerHandle, "GetSystemSharedLayerHandle"}, - {43, &ISelfController::GetSystemSharedBufferHandle, "GetSystemSharedBufferHandle"}, - {44, &ISelfController::CreateManagedDisplaySeparableLayer, "CreateManagedDisplaySeparableLayer"}, - {45, nullptr, "SetManagedDisplayLayerSeparationMode"}, - {46, nullptr, "SetRecordingLayerCompositionEnabled"}, - {50, &ISelfController::SetHandlesRequestToDisplay, "SetHandlesRequestToDisplay"}, - {51, &ISelfController::ApproveToDisplay, "ApproveToDisplay"}, - {60, nullptr, "OverrideAutoSleepTimeAndDimmingTime"}, - {61, nullptr, "SetMediaPlaybackState"}, - {62, &ISelfController::SetIdleTimeDetectionExtension, "SetIdleTimeDetectionExtension"}, - {63, &ISelfController::GetIdleTimeDetectionExtension, "GetIdleTimeDetectionExtension"}, - {64, nullptr, "SetInputDetectionSourceSet"}, - {65, &ISelfController::ReportUserIsActive, "ReportUserIsActive"}, - {66, nullptr, "GetCurrentIlluminance"}, - {67, nullptr, "IsIlluminanceAvailable"}, - {68, &ISelfController::SetAutoSleepDisabled, "SetAutoSleepDisabled"}, - {69, &ISelfController::IsAutoSleepDisabled, "IsAutoSleepDisabled"}, - {70, nullptr, "ReportMultimediaError"}, - {71, nullptr, "GetCurrentIlluminanceEx"}, - {72, nullptr, "SetInputDetectionPolicy"}, - {80, nullptr, "SetWirelessPriorityMode"}, - {90, &ISelfController::GetAccumulatedSuspendedTickValue, "GetAccumulatedSuspendedTickValue"}, - {91, &ISelfController::GetAccumulatedSuspendedTickChangedEvent, "GetAccumulatedSuspendedTickChangedEvent"}, - {100, &ISelfController::SetAlbumImageTakenNotificationEnabled, "SetAlbumImageTakenNotificationEnabled"}, - {110, nullptr, "SetApplicationAlbumUserData"}, - {120, &ISelfController::SaveCurrentScreenshot, "SaveCurrentScreenshot"}, - {130, &ISelfController::SetRecordVolumeMuted, "SetRecordVolumeMuted"}, - {1000, nullptr, "GetDebugStorageChannel"}, - }; - // clang-format on - - RegisterHandlers(functions); - - launchable_event = service_context.CreateEvent("ISelfController:LaunchableEvent"); - - // This event is created by AM on the first time GetAccumulatedSuspendedTickChangedEvent() is - // called. Yuzu can just create it unconditionally, since it doesn't need to support multiple - // ISelfControllers. The event is signaled on creation, and on transition from suspended -> not - // suspended if the event has previously been created by a call to - // GetAccumulatedSuspendedTickChangedEvent. - - accumulated_suspended_tick_changed_event = - service_context.CreateEvent("ISelfController:AccumulatedSuspendedTickChangedEvent"); - accumulated_suspended_tick_changed_event->Signal(); -} - -ISelfController::~ISelfController() { - service_context.CloseEvent(launchable_event); - service_context.CloseEvent(accumulated_suspended_tick_changed_event); -} - -void ISelfController::Exit(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - - system.Exit(); -} - -void ISelfController::LockExit(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - system.SetExitLocked(true); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::UnlockExit(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - system.SetExitLocked(false); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - - if (system.GetExitRequested()) { - system.Exit(); - } -} - -void ISelfController::EnterFatalSection(HLERequestContext& ctx) { - ++num_fatal_sections_entered; - LOG_DEBUG(Service_AM, "called. Num fatal sections entered: {}", num_fatal_sections_entered); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::LeaveFatalSection(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called."); - - // Entry and exit of fatal sections must be balanced. - if (num_fatal_sections_entered == 0) { - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(Result{ErrorModule::AM, 512}); - return; - } - - --num_fatal_sections_entered; - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::GetLibraryAppletLaunchableEvent(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - launchable_event->Signal(); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(launchable_event->GetReadableEvent()); -} - -void ISelfController::SetScreenShotPermission(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto permission = rp.PopEnum<ScreenshotPermission>(); - LOG_DEBUG(Service_AM, "called, permission={}", permission); - - screenshot_permission = permission; - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetOperationModeChangedNotification(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - bool flag = rp.Pop<bool>(); - LOG_WARNING(Service_AM, "(STUBBED) called flag={}", flag); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetPerformanceModeChangedNotification(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - bool flag = rp.Pop<bool>(); - LOG_WARNING(Service_AM, "(STUBBED) called flag={}", flag); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetFocusHandlingMode(HLERequestContext& ctx) { - // Takes 3 input u8s with each field located immediately after the previous - // u8, these are bool flags. No output. - IPC::RequestParser rp{ctx}; - - struct FocusHandlingModeParams { - u8 unknown0; - u8 unknown1; - u8 unknown2; - }; - const auto flags = rp.PopRaw<FocusHandlingModeParams>(); - - LOG_WARNING(Service_AM, "(STUBBED) called. unknown0={}, unknown1={}, unknown2={}", - flags.unknown0, flags.unknown1, flags.unknown2); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetRestartMessageEnabled(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetOutOfFocusSuspendingEnabled(HLERequestContext& ctx) { - // Takes 3 input u8s with each field located immediately after the previous - // u8, these are bool flags. No output. - IPC::RequestParser rp{ctx}; - - bool enabled = rp.Pop<bool>(); - LOG_WARNING(Service_AM, "(STUBBED) called enabled={}", enabled); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetAlbumImageOrientation(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::CreateManagedDisplayLayer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - // TODO(Subv): Find out how AM determines the display to use, for now just - // create the layer in the Default display. - const auto display_id = nvnflinger.OpenDisplay("Default"); - const auto layer_id = nvnflinger.CreateLayer(*display_id); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push(*layer_id); -} - -void ISelfController::IsSystemBufferSharingEnabled(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(this->EnsureBufferSharingEnabled()); -} - -void ISelfController::GetSystemSharedLayerHandle(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(this->EnsureBufferSharingEnabled()); - rb.Push<s64>(system_shared_buffer_id); - rb.Push<s64>(system_shared_layer_id); -} - -void ISelfController::GetSystemSharedBufferHandle(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(this->EnsureBufferSharingEnabled()); - rb.Push<s64>(system_shared_buffer_id); -} - -Result ISelfController::EnsureBufferSharingEnabled() { - if (buffer_sharing_enabled) { - return ResultSuccess; - } - - if (system.GetAppletManager().GetCurrentAppletId() <= Applets::AppletId::Application) { - return VI::ResultOperationFailed; - } - - const auto display_id = nvnflinger.OpenDisplay("Default"); - const auto result = nvnflinger.GetSystemBufferManager().Initialize( - &system_shared_buffer_id, &system_shared_layer_id, *display_id); - - if (result.IsSuccess()) { - buffer_sharing_enabled = true; - } - - return result; -} - -void ISelfController::CreateManagedDisplaySeparableLayer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - // TODO(Subv): Find out how AM determines the display to use, for now just - // create the layer in the Default display. - // This calls nn::vi::CreateRecordingLayer() which creates another layer. - // Currently we do not support more than 1 layer per display, output 1 layer id for now. - // Outputting 1 layer id instead of the expected 2 has not been observed to cause any adverse - // side effects. - // TODO: Support multiple layers - const auto display_id = nvnflinger.OpenDisplay("Default"); - const auto layer_id = nvnflinger.CreateLayer(*display_id); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push(*layer_id); -} - -void ISelfController::SetHandlesRequestToDisplay(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::ApproveToDisplay(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetIdleTimeDetectionExtension(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - idle_time_detection_extension = rp.Pop<u32>(); - LOG_DEBUG(Service_AM, "(STUBBED) called idle_time_detection_extension={}", - idle_time_detection_extension); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::GetIdleTimeDetectionExtension(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u32>(idle_time_detection_extension); -} - -void ISelfController::ReportUserIsActive(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetAutoSleepDisabled(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - is_auto_sleep_disabled = rp.Pop<bool>(); - - // On the system itself, if the previous state of is_auto_sleep_disabled - // differed from the current value passed in, it'd signify the internal - // window manager to update (and also increment some statistics like update counts) - // - // It'd also indicate this change to an idle handling context. - // - // However, given we're emulating this behavior, most of this can be ignored - // and it's sufficient to simply set the member variable for querying via - // IsAutoSleepDisabled(). - - LOG_DEBUG(Service_AM, "called. is_auto_sleep_disabled={}", is_auto_sleep_disabled); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::IsAutoSleepDisabled(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called."); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(is_auto_sleep_disabled); -} - -void ISelfController::GetAccumulatedSuspendedTickValue(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called."); - - // This command returns the total number of system ticks since ISelfController creation - // where the game was suspended. Since Yuzu doesn't implement game suspension, this command - // can just always return 0 ticks. - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push<u64>(0); -} - -void ISelfController::GetAccumulatedSuspendedTickChangedEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called."); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(accumulated_suspended_tick_changed_event->GetReadableEvent()); -} - -void ISelfController::SetAlbumImageTakenNotificationEnabled(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - // This service call sets an internal flag whether a notification is shown when an image is - // captured. Currently we do not support capturing images via the capture button, so this can be - // stubbed for now. - const bool album_image_taken_notification_enabled = rp.Pop<bool>(); - - LOG_WARNING(Service_AM, "(STUBBED) called. album_image_taken_notification_enabled={}", - album_image_taken_notification_enabled); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SaveCurrentScreenshot(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - const auto report_option = rp.PopEnum<Capture::AlbumReportOption>(); - - LOG_INFO(Service_AM, "called, report_option={}", report_option); - - const auto screenshot_service = - system.ServiceManager().GetService<Service::Capture::IScreenShotApplicationService>( - "caps:su"); - - if (screenshot_service) { - screenshot_service->CaptureAndSaveScreenshot(report_option); - } - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ISelfController::SetRecordVolumeMuted(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - const auto is_record_volume_muted = rp.Pop<bool>(); - - LOG_WARNING(Service_AM, "(STUBBED) called. is_record_volume_muted={}", is_record_volume_muted); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -AppletMessageQueue::AppletMessageQueue(Core::System& system) - : service_context{system, "AppletMessageQueue"} { - on_new_message = service_context.CreateEvent("AMMessageQueue:OnMessageReceived"); - on_operation_mode_changed = service_context.CreateEvent("AMMessageQueue:OperationModeChanged"); -} - -AppletMessageQueue::~AppletMessageQueue() { - service_context.CloseEvent(on_new_message); - service_context.CloseEvent(on_operation_mode_changed); -} - -Kernel::KReadableEvent& AppletMessageQueue::GetMessageReceiveEvent() { - return on_new_message->GetReadableEvent(); -} - -Kernel::KReadableEvent& AppletMessageQueue::GetOperationModeChangedEvent() { - return on_operation_mode_changed->GetReadableEvent(); -} - -void AppletMessageQueue::PushMessage(AppletMessage msg) { - messages.push(msg); - on_new_message->Signal(); -} - -AppletMessageQueue::AppletMessage AppletMessageQueue::PopMessage() { - if (messages.empty()) { - on_new_message->Clear(); - return AppletMessage::None; - } - auto msg = messages.front(); - messages.pop(); - if (messages.empty()) { - on_new_message->Clear(); - } - return msg; -} - -std::size_t AppletMessageQueue::GetMessageCount() const { - return messages.size(); -} - -void AppletMessageQueue::RequestExit() { - PushMessage(AppletMessage::Exit); -} - -void AppletMessageQueue::RequestResume() { - PushMessage(AppletMessage::Resume); -} - -void AppletMessageQueue::FocusStateChanged() { - PushMessage(AppletMessage::FocusStateChanged); -} - -void AppletMessageQueue::OperationModeChanged() { - PushMessage(AppletMessage::OperationModeChanged); - PushMessage(AppletMessage::PerformanceModeChanged); - on_operation_mode_changed->Signal(); -} - -ILockAccessor::ILockAccessor(Core::System& system_) - : ServiceFramework{system_, "ILockAccessor"}, service_context{system_, "ILockAccessor"} { - // clang-format off - static const FunctionInfo functions[] = { - {1, &ILockAccessor::TryLock, "TryLock"}, - {2, &ILockAccessor::Unlock, "Unlock"}, - {3, &ILockAccessor::GetEvent, "GetEvent"}, - {4,&ILockAccessor::IsLocked, "IsLocked"}, - }; - // clang-format on - - RegisterHandlers(functions); - - lock_event = service_context.CreateEvent("ILockAccessor::LockEvent"); -} - -ILockAccessor::~ILockAccessor() { - service_context.CloseEvent(lock_event); -}; - -void ILockAccessor::TryLock(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto return_handle = rp.Pop<bool>(); - - LOG_WARNING(Service_AM, "(STUBBED) called, return_handle={}", return_handle); - - // TODO: When return_handle is true this function should return the lock handle - - is_locked = true; - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u8>(is_locked); -} - -void ILockAccessor::Unlock(HLERequestContext& ctx) { - LOG_INFO(Service_AM, "called"); - - is_locked = false; - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ILockAccessor::GetEvent(HLERequestContext& ctx) { - LOG_INFO(Service_AM, "called"); - - lock_event->Signal(); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(lock_event->GetReadableEvent()); -} - -void ILockAccessor::IsLocked(HLERequestContext& ctx) { - LOG_INFO(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - rb.Push<u8>(is_locked); -} - -ICommonStateGetter::ICommonStateGetter(Core::System& system_, - std::shared_ptr<AppletMessageQueue> msg_queue_) - : ServiceFramework{system_, "ICommonStateGetter"}, msg_queue{std::move(msg_queue_)}, - service_context{system_, "ICommonStateGetter"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &ICommonStateGetter::GetEventHandle, "GetEventHandle"}, - {1, &ICommonStateGetter::ReceiveMessage, "ReceiveMessage"}, - {2, nullptr, "GetThisAppletKind"}, - {3, nullptr, "AllowToEnterSleep"}, - {4, nullptr, "DisallowToEnterSleep"}, - {5, &ICommonStateGetter::GetOperationMode, "GetOperationMode"}, - {6, &ICommonStateGetter::GetPerformanceMode, "GetPerformanceMode"}, - {7, nullptr, "GetCradleStatus"}, - {8, &ICommonStateGetter::GetBootMode, "GetBootMode"}, - {9, &ICommonStateGetter::GetCurrentFocusState, "GetCurrentFocusState"}, - {10, &ICommonStateGetter::RequestToAcquireSleepLock, "RequestToAcquireSleepLock"}, - {11, nullptr, "ReleaseSleepLock"}, - {12, nullptr, "ReleaseSleepLockTransiently"}, - {13, &ICommonStateGetter::GetAcquiredSleepLockEvent, "GetAcquiredSleepLockEvent"}, - {14, nullptr, "GetWakeupCount"}, - {20, nullptr, "PushToGeneralChannel"}, - {30, nullptr, "GetHomeButtonReaderLockAccessor"}, - {31, &ICommonStateGetter::GetReaderLockAccessorEx, "GetReaderLockAccessorEx"}, - {32, nullptr, "GetWriterLockAccessorEx"}, - {40, nullptr, "GetCradleFwVersion"}, - {50, &ICommonStateGetter::IsVrModeEnabled, "IsVrModeEnabled"}, - {51, &ICommonStateGetter::SetVrModeEnabled, "SetVrModeEnabled"}, - {52, &ICommonStateGetter::SetLcdBacklighOffEnabled, "SetLcdBacklighOffEnabled"}, - {53, &ICommonStateGetter::BeginVrModeEx, "BeginVrModeEx"}, - {54, &ICommonStateGetter::EndVrModeEx, "EndVrModeEx"}, - {55, nullptr, "IsInControllerFirmwareUpdateSection"}, - {59, nullptr, "SetVrPositionForDebug"}, - {60, &ICommonStateGetter::GetDefaultDisplayResolution, "GetDefaultDisplayResolution"}, - {61, &ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent, "GetDefaultDisplayResolutionChangeEvent"}, - {62, nullptr, "GetHdcpAuthenticationState"}, - {63, nullptr, "GetHdcpAuthenticationStateChangeEvent"}, - {64, nullptr, "SetTvPowerStateMatchingMode"}, - {65, nullptr, "GetApplicationIdByContentActionName"}, - {66, &ICommonStateGetter::SetCpuBoostMode, "SetCpuBoostMode"}, - {67, nullptr, "CancelCpuBoostMode"}, - {68, &ICommonStateGetter::GetBuiltInDisplayType, "GetBuiltInDisplayType"}, - {80, &ICommonStateGetter::PerformSystemButtonPressingIfInFocus, "PerformSystemButtonPressingIfInFocus"}, - {90, nullptr, "SetPerformanceConfigurationChangedNotification"}, - {91, nullptr, "GetCurrentPerformanceConfiguration"}, - {100, nullptr, "SetHandlingHomeButtonShortPressedEnabled"}, - {110, nullptr, "OpenMyGpuErrorHandler"}, - {120, nullptr, "GetAppletLaunchedHistory"}, - {200, nullptr, "GetOperationModeSystemInfo"}, - {300, &ICommonStateGetter::GetSettingsPlatformRegion, "GetSettingsPlatformRegion"}, - {400, nullptr, "ActivateMigrationService"}, - {401, nullptr, "DeactivateMigrationService"}, - {500, nullptr, "DisableSleepTillShutdown"}, - {501, nullptr, "SuppressDisablingSleepTemporarily"}, - {502, nullptr, "IsSleepEnabled"}, - {503, nullptr, "IsDisablingSleepSuppressed"}, - {900, &ICommonStateGetter::SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled, "SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled"}, - }; - // clang-format on - - RegisterHandlers(functions); - - sleep_lock_event = service_context.CreateEvent("ICommonStateGetter::SleepLockEvent"); - - // Configure applets to be in foreground state - msg_queue->PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); - msg_queue->PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); -} - -ICommonStateGetter::~ICommonStateGetter() { - service_context.CloseEvent(sleep_lock_event); -}; - -void ICommonStateGetter::GetBootMode(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u8>(static_cast<u8>(Service::PM::SystemBootMode::Normal)); // Normal boot mode -} - -void ICommonStateGetter::GetEventHandle(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(msg_queue->GetMessageReceiveEvent()); -} - -void ICommonStateGetter::ReceiveMessage(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - const auto message = msg_queue->PopMessage(); - IPC::ResponseBuilder rb{ctx, 3}; - - if (message == AppletMessageQueue::AppletMessage::None) { - LOG_ERROR(Service_AM, "Message queue is empty"); - rb.Push(AM::ResultNoMessages); - rb.PushEnum<AppletMessageQueue::AppletMessage>(message); - return; - } - - rb.Push(ResultSuccess); - rb.PushEnum<AppletMessageQueue::AppletMessage>(message); -} - -void ICommonStateGetter::GetCurrentFocusState(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(static_cast<u8>(FocusState::InFocus)); -} - -void ICommonStateGetter::RequestToAcquireSleepLock(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - // Sleep lock is acquired immediately. - sleep_lock_event->Signal(); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ICommonStateGetter::GetReaderLockAccessorEx(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto unknown = rp.Pop<u32>(); - - LOG_INFO(Service_AM, "called, unknown={}", unknown); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILockAccessor>(system); -} - -void ICommonStateGetter::GetAcquiredSleepLockEvent(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(sleep_lock_event->GetReadableEvent()); -} - -void ICommonStateGetter::IsVrModeEnabled(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(vr_mode_state); -} - -void ICommonStateGetter::SetVrModeEnabled(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - vr_mode_state = rp.Pop<bool>(); - - LOG_WARNING(Service_AM, "VR Mode is {}", vr_mode_state ? "on" : "off"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ICommonStateGetter::SetLcdBacklighOffEnabled(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto is_lcd_backlight_off_enabled = rp.Pop<bool>(); - - LOG_WARNING(Service_AM, "(STUBBED) called. is_lcd_backlight_off_enabled={}", - is_lcd_backlight_off_enabled); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ICommonStateGetter::BeginVrModeEx(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ICommonStateGetter::EndVrModeEx(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(msg_queue->GetOperationModeChangedEvent()); -} - -void ICommonStateGetter::GetDefaultDisplayResolution(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - - if (Settings::IsDockedMode()) { - rb.Push(static_cast<u32>(Service::VI::DisplayResolution::DockedWidth)); - rb.Push(static_cast<u32>(Service::VI::DisplayResolution::DockedHeight)); - } else { - rb.Push(static_cast<u32>(Service::VI::DisplayResolution::UndockedWidth)); - rb.Push(static_cast<u32>(Service::VI::DisplayResolution::UndockedHeight)); - } -} - -void ICommonStateGetter::SetCpuBoostMode(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called, forwarding to APM:SYS"); - - const auto& sm = system.ServiceManager(); - const auto apm_sys = sm.GetService<APM::APM_Sys>("apm:sys"); - ASSERT(apm_sys != nullptr); - - apm_sys->SetCpuBoostMode(ctx); -} - -void ICommonStateGetter::GetBuiltInDisplayType(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(0); -} - -void ICommonStateGetter::PerformSystemButtonPressingIfInFocus(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto system_button{rp.PopEnum<SystemButtonType>()}; - - LOG_WARNING(Service_AM, "(STUBBED) called, system_button={}", system_button); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ICommonStateGetter::GetSettingsPlatformRegion(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.PushEnum(SysPlatformRegion::Global); -} - -void ICommonStateGetter::SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled( - HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -IStorageImpl::~IStorageImpl() = default; - -class StorageDataImpl final : public IStorageImpl { -public: - explicit StorageDataImpl(std::vector<u8>&& buffer_) : buffer{std::move(buffer_)} {} - - std::vector<u8>& GetData() override { - return buffer; - } - - const std::vector<u8>& GetData() const override { - return buffer; - } - - std::size_t GetSize() const override { - return buffer.size(); - } - -private: - std::vector<u8> buffer; -}; - -IStorage::IStorage(Core::System& system_, std::vector<u8>&& buffer) - : ServiceFramework{system_, "IStorage"}, impl{std::make_shared<StorageDataImpl>( - std::move(buffer))} { - Register(); -} - -void IStorage::Register() { - // clang-format off - static const FunctionInfo functions[] = { - {0, &IStorage::Open, "Open"}, - {1, nullptr, "OpenTransferStorage"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IStorage::~IStorage() = default; - -void IStorage::Open(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorageAccessor>(system, *this); -} - -void ICommonStateGetter::GetOperationMode(HLERequestContext& ctx) { - const bool use_docked_mode{Settings::IsDockedMode()}; - LOG_DEBUG(Service_AM, "called, use_docked_mode={}", use_docked_mode); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(static_cast<u8>(use_docked_mode ? OperationMode::Docked : OperationMode::Handheld)); -} - -void ICommonStateGetter::GetPerformanceMode(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.PushEnum(system.GetAPMController().GetCurrentPerformanceMode()); -} - -class ILibraryAppletAccessor final : public ServiceFramework<ILibraryAppletAccessor> { -public: - explicit ILibraryAppletAccessor(Core::System& system_, std::shared_ptr<Applets::Applet> applet_) - : ServiceFramework{system_, "ILibraryAppletAccessor"}, applet{std::move(applet_)} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &ILibraryAppletAccessor::GetAppletStateChangedEvent, "GetAppletStateChangedEvent"}, - {1, &ILibraryAppletAccessor::IsCompleted, "IsCompleted"}, - {10, &ILibraryAppletAccessor::Start, "Start"}, - {20, &ILibraryAppletAccessor::RequestExit, "RequestExit"}, - {25, nullptr, "Terminate"}, - {30, &ILibraryAppletAccessor::GetResult, "GetResult"}, - {50, nullptr, "SetOutOfFocusApplicationSuspendingEnabled"}, - {60, &ILibraryAppletAccessor::PresetLibraryAppletGpuTimeSliceZero, "PresetLibraryAppletGpuTimeSliceZero"}, - {100, &ILibraryAppletAccessor::PushInData, "PushInData"}, - {101, &ILibraryAppletAccessor::PopOutData, "PopOutData"}, - {102, nullptr, "PushExtraStorage"}, - {103, &ILibraryAppletAccessor::PushInteractiveInData, "PushInteractiveInData"}, - {104, &ILibraryAppletAccessor::PopInteractiveOutData, "PopInteractiveOutData"}, - {105, &ILibraryAppletAccessor::GetPopOutDataEvent, "GetPopOutDataEvent"}, - {106, &ILibraryAppletAccessor::GetPopInteractiveOutDataEvent, "GetPopInteractiveOutDataEvent"}, - {110, nullptr, "NeedsToExitProcess"}, - {120, nullptr, "GetLibraryAppletInfo"}, - {150, nullptr, "RequestForAppletToGetForeground"}, - {160, &ILibraryAppletAccessor::GetIndirectLayerConsumerHandle, "GetIndirectLayerConsumerHandle"}, - }; - // clang-format on - - RegisterHandlers(functions); - } - -private: - void GetAppletStateChangedEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(applet->GetBroker().GetStateChangedEvent()); - } - - void IsCompleted(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u32>(applet->TransactionComplete()); - } - - void GetResult(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(applet->GetStatus()); - } - - void PresetLibraryAppletGpuTimeSliceZero(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - } - - void Start(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - ASSERT(applet != nullptr); - - applet->Initialize(); - applet->Execute(); - - IPC::ResponseBuilder rb{ctx, 2}; - 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"); - - IPC::RequestParser rp{ctx}; - applet->GetBroker().PushNormalDataFromGame(rp.PopIpcInterface<IStorage>().lock()); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - } - - void PopOutData(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - auto storage = applet->GetBroker().PopNormalDataToGame(); - if (storage == nullptr) { - LOG_DEBUG(Service_AM, - "storage is a nullptr. There is no data in the current normal channel"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(AM::ResultNoDataInChannel); - return; - } - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorage>(std::move(storage)); - } - - void PushInteractiveInData(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::RequestParser rp{ctx}; - applet->GetBroker().PushInteractiveDataFromGame(rp.PopIpcInterface<IStorage>().lock()); - - ASSERT(applet->IsInitialized()); - applet->ExecuteInteractive(); - applet->Execute(); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - } - - void PopInteractiveOutData(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - auto storage = applet->GetBroker().PopInteractiveDataToGame(); - if (storage == nullptr) { - LOG_DEBUG(Service_AM, - "storage is a nullptr. There is no data in the current interactive channel"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(AM::ResultNoDataInChannel); - return; - } - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorage>(std::move(storage)); - } - - void GetPopOutDataEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(applet->GetBroker().GetNormalDataEvent()); - } - - void GetPopInteractiveOutDataEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(applet->GetBroker().GetInteractiveDataEvent()); - } - - void GetIndirectLayerConsumerHandle(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - // We require a non-zero handle to be valid. Using 0xdeadbeef allows us to trace if this is - // actually used anywhere - constexpr u64 handle = 0xdeadbeef; - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push(handle); - } - - std::shared_ptr<Applets::Applet> applet; -}; - -IStorageAccessor::IStorageAccessor(Core::System& system_, IStorage& backing_) - : ServiceFramework{system_, "IStorageAccessor"}, backing{backing_} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &IStorageAccessor::GetSize, "GetSize"}, - {10, &IStorageAccessor::Write, "Write"}, - {11, &IStorageAccessor::Read, "Read"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IStorageAccessor::~IStorageAccessor() = default; - -void IStorageAccessor::GetSize(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 4}; - - rb.Push(ResultSuccess); - rb.Push(static_cast<u64>(backing.GetSize())); -} - -void IStorageAccessor::Write(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - const u64 offset{rp.Pop<u64>()}; - const auto data{ctx.ReadBuffer()}; - const std::size_t size{std::min<u64>(data.size(), backing.GetSize() - offset)}; - - LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, size); - - if (offset > backing.GetSize()) { - LOG_ERROR(Service_AM, - "offset is out of bounds, backing_buffer_sz={}, data_size={}, offset={}", - backing.GetSize(), size, offset); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(AM::ResultInvalidOffset); - return; - } - - std::memcpy(backing.GetData().data() + offset, data.data(), size); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IStorageAccessor::Read(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - const u64 offset{rp.Pop<u64>()}; - const std::size_t size{std::min<u64>(ctx.GetWriteBufferSize(), backing.GetSize() - offset)}; - - LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, size); - - if (offset > backing.GetSize()) { - LOG_ERROR(Service_AM, "offset is out of bounds, backing_buffer_sz={}, size={}, offset={}", - backing.GetSize(), size, offset); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(AM::ResultInvalidOffset); - return; - } - - ctx.WriteBuffer(backing.GetData().data() + offset, size); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -ILibraryAppletCreator::ILibraryAppletCreator(Core::System& system_) - : ServiceFramework{system_, "ILibraryAppletCreator"} { - static const FunctionInfo functions[] = { - {0, &ILibraryAppletCreator::CreateLibraryApplet, "CreateLibraryApplet"}, - {1, nullptr, "TerminateAllLibraryApplets"}, - {2, nullptr, "AreAnyLibraryAppletsLeft"}, - {10, &ILibraryAppletCreator::CreateStorage, "CreateStorage"}, - {11, &ILibraryAppletCreator::CreateTransferMemoryStorage, "CreateTransferMemoryStorage"}, - {12, &ILibraryAppletCreator::CreateHandleStorage, "CreateHandleStorage"}, - }; - RegisterHandlers(functions); -} - -ILibraryAppletCreator::~ILibraryAppletCreator() = default; - -void ILibraryAppletCreator::CreateLibraryApplet(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - const auto applet_id = rp.PopRaw<Applets::AppletId>(); - const auto applet_mode = rp.PopRaw<Applets::LibraryAppletMode>(); - - LOG_DEBUG(Service_AM, "called with applet_id={:08X}, applet_mode={:08X}", applet_id, - applet_mode); - - const auto& applet_manager{system.GetAppletManager()}; - const auto applet = applet_manager.GetApplet(applet_id, applet_mode); - - if (applet == nullptr) { - LOG_ERROR(Service_AM, "Applet doesn't exist! applet_id={}", applet_id); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletAccessor>(system, applet); -} - -void ILibraryAppletCreator::CreateStorage(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - const s64 size{rp.Pop<s64>()}; - - LOG_DEBUG(Service_AM, "called, size={}", size); - - if (size <= 0) { - LOG_ERROR(Service_AM, "size is less than or equal to 0"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - std::vector<u8> buffer(size); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorage>(system, std::move(buffer)); -} - -void ILibraryAppletCreator::CreateTransferMemoryStorage(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - struct Parameters { - u8 permissions; - s64 size; - }; - - const auto parameters{rp.PopRaw<Parameters>()}; - const auto handle{ctx.GetCopyHandle(0)}; - - LOG_DEBUG(Service_AM, "called, permissions={}, size={}, handle={:08X}", parameters.permissions, - parameters.size, handle); - - if (parameters.size <= 0) { - LOG_ERROR(Service_AM, "size is less than or equal to 0"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - auto transfer_mem = ctx.GetObjectFromHandle<Kernel::KTransferMemory>(handle); - - if (transfer_mem.IsNull()) { - LOG_ERROR(Service_AM, "transfer_mem is a nullptr for handle={:08X}", handle); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - std::vector<u8> memory(transfer_mem->GetSize()); - ctx.GetMemory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), memory.size()); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorage>(system, std::move(memory)); -} - -void ILibraryAppletCreator::CreateHandleStorage(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - - const s64 size{rp.Pop<s64>()}; - const auto handle{ctx.GetCopyHandle(0)}; - - LOG_DEBUG(Service_AM, "called, size={}, handle={:08X}", size, handle); - - if (size <= 0) { - LOG_ERROR(Service_AM, "size is less than or equal to 0"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - auto transfer_mem = ctx.GetObjectFromHandle<Kernel::KTransferMemory>(handle); - - if (transfer_mem.IsNull()) { - LOG_ERROR(Service_AM, "transfer_mem is a nullptr for handle={:08X}", handle); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - std::vector<u8> memory(transfer_mem->GetSize()); - ctx.GetMemory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), memory.size()); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorage>(system, std::move(memory)); -} - -ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_) - : ServiceFramework{system_, "ILibraryAppletSelfAccessor"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &ILibraryAppletSelfAccessor::PopInData, "PopInData"}, - {1, &ILibraryAppletSelfAccessor::PushOutData, "PushOutData"}, - {2, nullptr, "PopInteractiveInData"}, - {3, nullptr, "PushInteractiveOutData"}, - {5, nullptr, "GetPopInDataEvent"}, - {6, nullptr, "GetPopInteractiveInDataEvent"}, - {10, &ILibraryAppletSelfAccessor::ExitProcessAndReturn, "ExitProcessAndReturn"}, - {11, &ILibraryAppletSelfAccessor::GetLibraryAppletInfo, "GetLibraryAppletInfo"}, - {12, &ILibraryAppletSelfAccessor::GetMainAppletIdentityInfo, "GetMainAppletIdentityInfo"}, - {13, nullptr, "CanUseApplicationCore"}, - {14, &ILibraryAppletSelfAccessor::GetCallerAppletIdentityInfo, "GetCallerAppletIdentityInfo"}, - {15, nullptr, "GetMainAppletApplicationControlProperty"}, - {16, nullptr, "GetMainAppletStorageId"}, - {17, nullptr, "GetCallerAppletIdentityInfoStack"}, - {18, nullptr, "GetNextReturnDestinationAppletIdentityInfo"}, - {19, &ILibraryAppletSelfAccessor::GetDesirableKeyboardLayout, "GetDesirableKeyboardLayout"}, - {20, nullptr, "PopExtraStorage"}, - {25, nullptr, "GetPopExtraStorageEvent"}, - {30, nullptr, "UnpopInData"}, - {31, nullptr, "UnpopExtraStorage"}, - {40, nullptr, "GetIndirectLayerProducerHandle"}, - {50, nullptr, "ReportVisibleError"}, - {51, nullptr, "ReportVisibleErrorWithErrorContext"}, - {60, nullptr, "GetMainAppletApplicationDesiredLanguage"}, - {70, nullptr, "GetCurrentApplicationId"}, - {80, nullptr, "RequestExitToSelf"}, - {90, nullptr, "CreateApplicationAndPushAndRequestToLaunch"}, - {100, nullptr, "CreateGameMovieTrimmer"}, - {101, nullptr, "ReserveResourceForMovieOperation"}, - {102, nullptr, "UnreserveResourceForMovieOperation"}, - {110, &ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers, "GetMainAppletAvailableUsers"}, - {120, nullptr, "GetLaunchStorageInfoForDebug"}, - {130, nullptr, "GetGpuErrorDetectedSystemEvent"}, - {140, nullptr, "SetApplicationMemoryReservation"}, - {150, &ILibraryAppletSelfAccessor::ShouldSetGpuTimeSliceManually, "ShouldSetGpuTimeSliceManually"}, - }; - // clang-format on - RegisterHandlers(functions); - - switch (system.GetAppletManager().GetCurrentAppletId()) { - case Applets::AppletId::Cabinet: - PushInShowCabinetData(); - break; - case Applets::AppletId::MiiEdit: - PushInShowMiiEditData(); - break; - case Applets::AppletId::PhotoViewer: - PushInShowAlbum(); - break; - case Applets::AppletId::SoftwareKeyboard: - PushInShowSoftwareKeyboard(); - break; - case Applets::AppletId::Controller: - PushInShowController(); - break; - default: - break; - } -} - -ILibraryAppletSelfAccessor::~ILibraryAppletSelfAccessor() = default; -void ILibraryAppletSelfAccessor::PopInData(HLERequestContext& ctx) { - LOG_INFO(Service_AM, "called"); - - if (queue_data.empty()) { - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultNoDataInChannel); - return; - } - - auto data = queue_data.front(); - queue_data.pop_front(); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorage>(system, std::move(data)); -} - -void ILibraryAppletSelfAccessor::PushOutData(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ILibraryAppletSelfAccessor::ExitProcessAndReturn(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - system.Exit(); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void ILibraryAppletSelfAccessor::GetLibraryAppletInfo(HLERequestContext& ctx) { - struct LibraryAppletInfo { - Applets::AppletId applet_id; - Applets::LibraryAppletMode library_applet_mode; - }; - - LOG_WARNING(Service_AM, "(STUBBED) called"); - - const LibraryAppletInfo applet_info{ - .applet_id = system.GetAppletManager().GetCurrentAppletId(), - .library_applet_mode = Applets::LibraryAppletMode::AllForeground, - }; - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.PushRaw(applet_info); -} - -void ILibraryAppletSelfAccessor::GetMainAppletIdentityInfo(HLERequestContext& ctx) { - struct AppletIdentityInfo { - Applets::AppletId applet_id; - INSERT_PADDING_BYTES(0x4); - u64 application_id; - }; - static_assert(sizeof(AppletIdentityInfo) == 0x10, "AppletIdentityInfo has incorrect size."); - - LOG_WARNING(Service_AM, "(STUBBED) called"); - - const AppletIdentityInfo applet_info{ - .applet_id = Applets::AppletId::QLaunch, - .application_id = 0x0100000000001000ull, - }; - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.PushRaw(applet_info); -} - -void ILibraryAppletSelfAccessor::GetCallerAppletIdentityInfo(HLERequestContext& ctx) { - struct AppletIdentityInfo { - Applets::AppletId applet_id; - INSERT_PADDING_BYTES(0x4); - u64 application_id; - }; - static_assert(sizeof(AppletIdentityInfo) == 0x10, "AppletIdentityInfo has incorrect size."); - LOG_WARNING(Service_AM, "(STUBBED) called"); - - const AppletIdentityInfo applet_info{ - .applet_id = Applets::AppletId::QLaunch, - .application_id = 0x0100000000001000ull, - }; - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.PushRaw(applet_info); -} - -void ILibraryAppletSelfAccessor::GetDesirableKeyboardLayout(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u32>(0); -} - -void ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(HLERequestContext& ctx) { - const Service::Account::ProfileManager manager{}; - bool is_empty{true}; - s32 user_count{-1}; - - LOG_INFO(Service_AM, "called"); - - if (manager.GetUserCount() > 0) { - is_empty = false; - user_count = static_cast<s32>(manager.GetUserCount()); - ctx.WriteBuffer(manager.GetAllUsers()); - } - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push<u8>(is_empty); - rb.Push(user_count); -} - -void ILibraryAppletSelfAccessor::ShouldSetGpuTimeSliceManually(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - rb.Push<u8>(0); -} - -void ILibraryAppletSelfAccessor::PushInShowAlbum() { - const Applets::CommonArguments arguments{ - .arguments_version = Applets::CommonArgumentVersion::Version3, - .size = Applets::CommonArgumentSize::Version3, - .library_version = 1, - .theme_color = Applets::ThemeColor::BasicBlack, - .play_startup_sound = true, - .system_tick = system.CoreTiming().GetClockTicks(), - }; - - std::vector<u8> argument_data(sizeof(arguments)); - std::vector<u8> settings_data{2}; - std::memcpy(argument_data.data(), &arguments, sizeof(arguments)); - queue_data.emplace_back(std::move(argument_data)); - queue_data.emplace_back(std::move(settings_data)); -} - -void ILibraryAppletSelfAccessor::PushInShowController() { - const Applets::CommonArguments common_args = { - .arguments_version = Applets::CommonArgumentVersion::Version3, - .size = Applets::CommonArgumentSize::Version3, - .library_version = static_cast<u32>(Applets::ControllerAppletVersion::Version8), - .theme_color = Applets::ThemeColor::BasicBlack, - .play_startup_sound = true, - .system_tick = system.CoreTiming().GetClockTicks(), - }; - - Applets::ControllerSupportArgNew user_args = { - .header = {.player_count_min = 1, - .player_count_max = 4, - .enable_take_over_connection = true, - .enable_left_justify = false, - .enable_permit_joy_dual = true, - .enable_single_mode = false, - .enable_identification_color = false}, - .identification_colors = {}, - .enable_explain_text = false, - .explain_text = {}, - }; - - Applets::ControllerSupportArgPrivate private_args = { - .arg_private_size = sizeof(Applets::ControllerSupportArgPrivate), - .arg_size = sizeof(Applets::ControllerSupportArgNew), - .is_home_menu = true, - .flag_1 = true, - .mode = Applets::ControllerSupportMode::ShowControllerSupport, - .caller = Applets::ControllerSupportCaller:: - Application, // switchbrew: Always zero except with - // ShowControllerFirmwareUpdateForSystem/ShowControllerKeyRemappingForSystem, - // which sets this to the input param - .style_set = Core::HID::NpadStyleSet::None, - .joy_hold_type = 0, - }; - std::vector<u8> common_args_data(sizeof(common_args)); - std::vector<u8> private_args_data(sizeof(private_args)); - std::vector<u8> user_args_data(sizeof(user_args)); - - std::memcpy(common_args_data.data(), &common_args, sizeof(common_args)); - std::memcpy(private_args_data.data(), &private_args, sizeof(private_args)); - std::memcpy(user_args_data.data(), &user_args, sizeof(user_args)); - - queue_data.emplace_back(std::move(common_args_data)); - queue_data.emplace_back(std::move(private_args_data)); - queue_data.emplace_back(std::move(user_args_data)); -} - -void ILibraryAppletSelfAccessor::PushInShowCabinetData() { - const Applets::CommonArguments arguments{ - .arguments_version = Applets::CommonArgumentVersion::Version3, - .size = Applets::CommonArgumentSize::Version3, - .library_version = static_cast<u32>(Applets::CabinetAppletVersion::Version1), - .theme_color = Applets::ThemeColor::BasicBlack, - .play_startup_sound = true, - .system_tick = system.CoreTiming().GetClockTicks(), - }; - - const Applets::StartParamForAmiiboSettings amiibo_settings{ - .param_1 = 0, - .applet_mode = system.GetAppletManager().GetCabinetMode(), - .flags = Applets::CabinetFlags::None, - .amiibo_settings_1 = 0, - .device_handle = 0, - .tag_info{}, - .register_info{}, - .amiibo_settings_3{}, - }; - - std::vector<u8> argument_data(sizeof(arguments)); - std::vector<u8> settings_data(sizeof(amiibo_settings)); - std::memcpy(argument_data.data(), &arguments, sizeof(arguments)); - std::memcpy(settings_data.data(), &amiibo_settings, sizeof(amiibo_settings)); - queue_data.emplace_back(std::move(argument_data)); - queue_data.emplace_back(std::move(settings_data)); -} - -void ILibraryAppletSelfAccessor::PushInShowMiiEditData() { - struct MiiEditV3 { - Applets::MiiEditAppletInputCommon common; - Applets::MiiEditAppletInputV3 input; - }; - static_assert(sizeof(MiiEditV3) == 0x100, "MiiEditV3 has incorrect size."); - - MiiEditV3 mii_arguments{ - .common = - { - .version = Applets::MiiEditAppletVersion::Version3, - .applet_mode = Applets::MiiEditAppletMode::ShowMiiEdit, - }, - .input{}, - }; - - std::vector<u8> argument_data(sizeof(mii_arguments)); - std::memcpy(argument_data.data(), &mii_arguments, sizeof(mii_arguments)); - - queue_data.emplace_back(std::move(argument_data)); -} - -void ILibraryAppletSelfAccessor::PushInShowSoftwareKeyboard() { - const Applets::CommonArguments arguments{ - .arguments_version = Applets::CommonArgumentVersion::Version3, - .size = Applets::CommonArgumentSize::Version3, - .library_version = static_cast<u32>(Applets::SwkbdAppletVersion::Version524301), - .theme_color = Applets::ThemeColor::BasicBlack, - .play_startup_sound = true, - .system_tick = system.CoreTiming().GetClockTicks(), - }; - - std::vector<char16_t> initial_string(0); - - const Applets::SwkbdConfigCommon swkbd_config{ - .type = Applets::SwkbdType::Qwerty, - .ok_text{}, - .left_optional_symbol_key{}, - .right_optional_symbol_key{}, - .use_prediction = false, - .key_disable_flags{}, - .initial_cursor_position = Applets::SwkbdInitialCursorPosition::Start, - .header_text{}, - .sub_text{}, - .guide_text{}, - .max_text_length = 500, - .min_text_length = 0, - .password_mode = Applets::SwkbdPasswordMode::Disabled, - .text_draw_type = Applets::SwkbdTextDrawType::Box, - .enable_return_button = true, - .use_utf8 = false, - .use_blur_background = true, - .initial_string_offset{}, - .initial_string_length = static_cast<u32>(initial_string.size()), - .user_dictionary_offset{}, - .user_dictionary_entries{}, - .use_text_check = false, - }; - - Applets::SwkbdConfigNew swkbd_config_new{}; - - std::vector<u8> argument_data(sizeof(arguments)); - std::vector<u8> swkbd_data(sizeof(swkbd_config) + sizeof(swkbd_config_new)); - std::vector<u8> work_buffer(swkbd_config.initial_string_length * sizeof(char16_t)); - - std::memcpy(argument_data.data(), &arguments, sizeof(arguments)); - std::memcpy(swkbd_data.data(), &swkbd_config, sizeof(swkbd_config)); - std::memcpy(swkbd_data.data() + sizeof(swkbd_config), &swkbd_config_new, - sizeof(Applets::SwkbdConfigNew)); - std::memcpy(work_buffer.data(), initial_string.data(), - swkbd_config.initial_string_length * sizeof(char16_t)); - - queue_data.emplace_back(std::move(argument_data)); - queue_data.emplace_back(std::move(swkbd_data)); - queue_data.emplace_back(std::move(work_buffer)); -} - -IAppletCommonFunctions::IAppletCommonFunctions(Core::System& system_) - : ServiceFramework{system_, "IAppletCommonFunctions"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, nullptr, "SetTerminateResult"}, - {10, nullptr, "ReadThemeStorage"}, - {11, nullptr, "WriteThemeStorage"}, - {20, nullptr, "PushToAppletBoundChannel"}, - {21, nullptr, "TryPopFromAppletBoundChannel"}, - {40, nullptr, "GetDisplayLogicalResolution"}, - {42, nullptr, "SetDisplayMagnification"}, - {50, nullptr, "SetHomeButtonDoubleClickEnabled"}, - {51, nullptr, "GetHomeButtonDoubleClickEnabled"}, - {52, nullptr, "IsHomeButtonShortPressedBlocked"}, - {60, nullptr, "IsVrModeCurtainRequired"}, - {61, nullptr, "IsSleepRequiredByHighTemperature"}, - {62, nullptr, "IsSleepRequiredByLowBattery"}, - {70, &IAppletCommonFunctions::SetCpuBoostRequestPriority, "SetCpuBoostRequestPriority"}, - {80, nullptr, "SetHandlingCaptureButtonShortPressedMessageEnabledForApplet"}, - {81, nullptr, "SetHandlingCaptureButtonLongPressedMessageEnabledForApplet"}, - {90, nullptr, "OpenNamedChannelAsParent"}, - {91, nullptr, "OpenNamedChannelAsChild"}, - {100, nullptr, "SetApplicationCoreUsageMode"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IAppletCommonFunctions::~IAppletCommonFunctions() = default; - -void IAppletCommonFunctions::SetCpuBoostRequestPriority(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -IApplicationFunctions::IApplicationFunctions(Core::System& system_) - : ServiceFramework{system_, "IApplicationFunctions"}, service_context{system, - "IApplicationFunctions"} { - // clang-format off - static const FunctionInfo functions[] = { - {1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"}, - {10, nullptr, "CreateApplicationAndPushAndRequestToStart"}, - {11, nullptr, "CreateApplicationAndPushAndRequestToStartForQuest"}, - {12, nullptr, "CreateApplicationAndRequestToStart"}, - {13, &IApplicationFunctions::CreateApplicationAndRequestToStartForQuest, "CreateApplicationAndRequestToStartForQuest"}, - {14, nullptr, "CreateApplicationWithAttributeAndPushAndRequestToStartForQuest"}, - {15, nullptr, "CreateApplicationWithAttributeAndRequestToStartForQuest"}, - {20, &IApplicationFunctions::EnsureSaveData, "EnsureSaveData"}, - {21, &IApplicationFunctions::GetDesiredLanguage, "GetDesiredLanguage"}, - {22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"}, - {23, &IApplicationFunctions::GetDisplayVersion, "GetDisplayVersion"}, - {24, nullptr, "GetLaunchStorageInfoForDebug"}, - {25, &IApplicationFunctions::ExtendSaveData, "ExtendSaveData"}, - {26, &IApplicationFunctions::GetSaveDataSize, "GetSaveDataSize"}, - {27, &IApplicationFunctions::CreateCacheStorage, "CreateCacheStorage"}, - {28, &IApplicationFunctions::GetSaveDataSizeMax, "GetSaveDataSizeMax"}, - {29, nullptr, "GetCacheStorageMax"}, - {30, &IApplicationFunctions::BeginBlockingHomeButtonShortAndLongPressed, "BeginBlockingHomeButtonShortAndLongPressed"}, - {31, &IApplicationFunctions::EndBlockingHomeButtonShortAndLongPressed, "EndBlockingHomeButtonShortAndLongPressed"}, - {32, &IApplicationFunctions::BeginBlockingHomeButton, "BeginBlockingHomeButton"}, - {33, &IApplicationFunctions::EndBlockingHomeButton, "EndBlockingHomeButton"}, - {34, nullptr, "SelectApplicationLicense"}, - {35, nullptr, "GetDeviceSaveDataSizeMax"}, - {36, nullptr, "GetLimitedApplicationLicense"}, - {37, nullptr, "GetLimitedApplicationLicenseUpgradableEvent"}, - {40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"}, - {50, &IApplicationFunctions::GetPseudoDeviceId, "GetPseudoDeviceId"}, - {60, nullptr, "SetMediaPlaybackStateForApplication"}, - {65, &IApplicationFunctions::IsGamePlayRecordingSupported, "IsGamePlayRecordingSupported"}, - {66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"}, - {67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"}, - {68, nullptr, "RequestFlushGamePlayingMovieForDebug"}, - {70, nullptr, "RequestToShutdown"}, - {71, nullptr, "RequestToReboot"}, - {72, nullptr, "RequestToSleep"}, - {80, nullptr, "ExitAndRequestToShowThanksMessage"}, - {90, &IApplicationFunctions::EnableApplicationCrashReport, "EnableApplicationCrashReport"}, - {100, &IApplicationFunctions::InitializeApplicationCopyrightFrameBuffer, "InitializeApplicationCopyrightFrameBuffer"}, - {101, &IApplicationFunctions::SetApplicationCopyrightImage, "SetApplicationCopyrightImage"}, - {102, &IApplicationFunctions::SetApplicationCopyrightVisibility, "SetApplicationCopyrightVisibility"}, - {110, &IApplicationFunctions::QueryApplicationPlayStatistics, "QueryApplicationPlayStatistics"}, - {111, &IApplicationFunctions::QueryApplicationPlayStatisticsByUid, "QueryApplicationPlayStatisticsByUid"}, - {120, &IApplicationFunctions::ExecuteProgram, "ExecuteProgram"}, - {121, &IApplicationFunctions::ClearUserChannel, "ClearUserChannel"}, - {122, &IApplicationFunctions::UnpopToUserChannel, "UnpopToUserChannel"}, - {123, &IApplicationFunctions::GetPreviousProgramIndex, "GetPreviousProgramIndex"}, - {124, nullptr, "EnableApplicationAllThreadDumpOnCrash"}, - {130, &IApplicationFunctions::GetGpuErrorDetectedSystemEvent, "GetGpuErrorDetectedSystemEvent"}, - {131, nullptr, "SetDelayTimeToAbortOnGpuError"}, - {140, &IApplicationFunctions::GetFriendInvitationStorageChannelEvent, "GetFriendInvitationStorageChannelEvent"}, - {141, &IApplicationFunctions::TryPopFromFriendInvitationStorageChannel, "TryPopFromFriendInvitationStorageChannel"}, - {150, &IApplicationFunctions::GetNotificationStorageChannelEvent, "GetNotificationStorageChannelEvent"}, - {151, nullptr, "TryPopFromNotificationStorageChannel"}, - {160, &IApplicationFunctions::GetHealthWarningDisappearedSystemEvent, "GetHealthWarningDisappearedSystemEvent"}, - {170, nullptr, "SetHdcpAuthenticationActivated"}, - {180, nullptr, "GetLaunchRequiredVersion"}, - {181, nullptr, "UpgradeLaunchRequiredVersion"}, - {190, nullptr, "SendServerMaintenanceOverlayNotification"}, - {200, nullptr, "GetLastApplicationExitReason"}, - {500, nullptr, "StartContinuousRecordingFlushForDebug"}, - {1000, nullptr, "CreateMovieMaker"}, - {1001, &IApplicationFunctions::PrepareForJit, "PrepareForJit"}, - }; - // clang-format on - - RegisterHandlers(functions); - - gpu_error_detected_event = - service_context.CreateEvent("IApplicationFunctions:GpuErrorDetectedSystemEvent"); - friend_invitation_storage_channel_event = - service_context.CreateEvent("IApplicationFunctions:FriendInvitationStorageChannelEvent"); - notification_storage_channel_event = - service_context.CreateEvent("IApplicationFunctions:NotificationStorageChannelEvent"); - health_warning_disappeared_system_event = - service_context.CreateEvent("IApplicationFunctions:HealthWarningDisappearedSystemEvent"); -} - -IApplicationFunctions::~IApplicationFunctions() { - service_context.CloseEvent(gpu_error_detected_event); - service_context.CloseEvent(friend_invitation_storage_channel_event); - service_context.CloseEvent(notification_storage_channel_event); - service_context.CloseEvent(health_warning_disappeared_system_event); -} - -void IApplicationFunctions::EnableApplicationCrashReport(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::InitializeApplicationCopyrightFrameBuffer(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::SetApplicationCopyrightImage(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::SetApplicationCopyrightVisibility(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto is_visible = rp.Pop<bool>(); - - LOG_WARNING(Service_AM, "(STUBBED) called, is_visible={}", is_visible); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::BeginBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::EndBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::BeginBlockingHomeButton(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::EndBlockingHomeButton(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::PopLaunchParameter(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto kind = rp.PopEnum<LaunchParameterKind>(); - - LOG_INFO(Service_AM, "called, kind={:08X}", kind); - - if (kind == LaunchParameterKind::UserChannel) { - auto channel = system.GetUserChannel(); - if (channel.empty()) { - LOG_ERROR(Service_AM, "Attempted to load launch parameter but none was found!"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(AM::ResultNoDataInChannel); - return; - } - - auto data = channel.back(); - channel.pop_back(); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IStorage>(system, std::move(data)); - } else if (kind == LaunchParameterKind::AccountPreselectedUser && - !launch_popped_account_preselect) { - // TODO: Verify this is hw-accurate - LaunchParameterAccountPreselectedUser params{}; - - params.magic = LAUNCH_PARAMETER_ACCOUNT_PRESELECTED_USER_MAGIC; - params.is_account_selected = 1; - - Account::ProfileManager profile_manager{}; - const auto uuid = profile_manager.GetUser(static_cast<s32>(Settings::values.current_user)); - ASSERT(uuid.has_value() && uuid->IsValid()); - params.current_user = *uuid; - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - - std::vector<u8> buffer(sizeof(LaunchParameterAccountPreselectedUser)); - std::memcpy(buffer.data(), ¶ms, buffer.size()); - - rb.PushIpcInterface<IStorage>(system, std::move(buffer)); - launch_popped_account_preselect = true; - } else { - LOG_ERROR(Service_AM, "Unknown launch parameter kind."); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(AM::ResultNoDataInChannel); - } -} - -void IApplicationFunctions::CreateApplicationAndRequestToStartForQuest(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::EnsureSaveData(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - u128 user_id = rp.PopRaw<u128>(); - - LOG_DEBUG(Service_AM, "called, uid={:016X}{:016X}", user_id[1], user_id[0]); - - FileSys::SaveDataAttribute attribute{}; - attribute.title_id = system.GetApplicationProcessProgramID(); - attribute.user_id = user_id; - attribute.type = FileSys::SaveDataType::SaveData; - - FileSys::VirtualDir save_data{}; - const auto res = system.GetFileSystemController().OpenSaveDataController()->CreateSaveData( - &save_data, FileSys::SaveDataSpaceId::NandUser, attribute); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(res); - rb.Push<u64>(0); -} - -void IApplicationFunctions::SetTerminateResult(HLERequestContext& ctx) { - // Takes an input u32 Result, no output. - // For example, in some cases official apps use this with error 0x2A2 then - // uses svcBreak. - - IPC::RequestParser rp{ctx}; - u32 result = rp.Pop<u32>(); - LOG_WARNING(Service_AM, "(STUBBED) called, result=0x{:08X}", result); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::GetDisplayVersion(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - std::array<u8, 0x10> version_string{}; - - const auto res = [this] { - const auto title_id = system.GetApplicationProcessProgramID(); - - const FileSys::PatchManager pm{title_id, system.GetFileSystemController(), - system.GetContentProvider()}; - auto metadata = pm.GetControlMetadata(); - if (metadata.first != nullptr) { - return metadata; - } - - const FileSys::PatchManager pm_update{FileSys::GetUpdateTitleID(title_id), - system.GetFileSystemController(), - system.GetContentProvider()}; - return pm_update.GetControlMetadata(); - }(); - - if (res.first != nullptr) { - const auto& version = res.first->GetVersionString(); - std::copy(version.begin(), version.end(), version_string.begin()); - } else { - static constexpr char default_version[]{"1.0.0"}; - std::memcpy(version_string.data(), default_version, sizeof(default_version)); - } - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.PushRaw(version_string); -} - -void IApplicationFunctions::GetDesiredLanguage(HLERequestContext& ctx) { - // TODO(bunnei): This should be configurable - LOG_DEBUG(Service_AM, "called"); - - // Get supported languages from NACP, if possible - // Default to 0 (all languages supported) - u32 supported_languages = 0; - - const auto res = [this] { - const auto title_id = system.GetApplicationProcessProgramID(); - - const FileSys::PatchManager pm{title_id, system.GetFileSystemController(), - system.GetContentProvider()}; - auto metadata = pm.GetControlMetadata(); - if (metadata.first != nullptr) { - return metadata; - } - - const FileSys::PatchManager pm_update{FileSys::GetUpdateTitleID(title_id), - system.GetFileSystemController(), - system.GetContentProvider()}; - return pm_update.GetControlMetadata(); - }(); - - if (res.first != nullptr) { - supported_languages = res.first->GetSupportedLanguages(); - } - - // Call IApplicationManagerInterface implementation. - auto& service_manager = system.ServiceManager(); - auto ns_am2 = service_manager.GetService<NS::NS>("ns:am2"); - auto app_man = ns_am2->GetApplicationManagerInterface(); - - // Get desired application language - u8 desired_language{}; - const auto res_lang = - app_man->GetApplicationDesiredLanguage(&desired_language, supported_languages); - if (res_lang != ResultSuccess) { - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(res_lang); - return; - } - - // Convert to settings language code. - u64 language_code{}; - const auto res_code = - app_man->ConvertApplicationLanguageToLanguageCode(&language_code, desired_language); - if (res_code != ResultSuccess) { - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(res_code); - return; - } - - LOG_DEBUG(Service_AM, "got desired_language={:016X}", language_code); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - rb.Push(language_code); -} - -void IApplicationFunctions::IsGamePlayRecordingSupported(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - constexpr bool gameplay_recording_supported = false; - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(gameplay_recording_supported); -} - -void IApplicationFunctions::InitializeGamePlayRecording(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::SetGamePlayRecordingState(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::NotifyRunning(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u8>(0); // Unknown, seems to be ignored by official processes -} - -void IApplicationFunctions::GetPseudoDeviceId(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - - // Returns a 128-bit UUID - rb.Push<u64>(0); - rb.Push<u64>(0); -} - -void IApplicationFunctions::ExtendSaveData(HLERequestContext& ctx) { - struct Parameters { - FileSys::SaveDataType type; - u128 user_id; - u64 new_normal_size; - u64 new_journal_size; - }; - static_assert(sizeof(Parameters) == 40); - - IPC::RequestParser rp{ctx}; - const auto [type, user_id, new_normal_size, new_journal_size] = rp.PopRaw<Parameters>(); - - LOG_DEBUG(Service_AM, - "called with type={:02X}, user_id={:016X}{:016X}, new_normal={:016X}, " - "new_journal={:016X}", - static_cast<u8>(type), user_id[1], user_id[0], new_normal_size, new_journal_size); - - system.GetFileSystemController().OpenSaveDataController()->WriteSaveDataSize( - type, system.GetApplicationProcessProgramID(), user_id, - {new_normal_size, new_journal_size}); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(ResultSuccess); - - // The following value is used upon failure to help the system recover. - // Since we always succeed, this should be 0. - rb.Push<u64>(0); -} - -void IApplicationFunctions::GetSaveDataSize(HLERequestContext& ctx) { - struct Parameters { - FileSys::SaveDataType type; - u128 user_id; - }; - static_assert(sizeof(Parameters) == 24); - - IPC::RequestParser rp{ctx}; - const auto [type, user_id] = rp.PopRaw<Parameters>(); - - LOG_DEBUG(Service_AM, "called with type={:02X}, user_id={:016X}{:016X}", type, user_id[1], - user_id[0]); - - const auto size = system.GetFileSystemController().OpenSaveDataController()->ReadSaveDataSize( - type, system.GetApplicationProcessProgramID(), user_id); - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.Push(size.normal); - rb.Push(size.journal); -} - -void IApplicationFunctions::CreateCacheStorage(HLERequestContext& ctx) { - struct InputParameters { - u16 index; - s64 size; - s64 journal_size; - }; - static_assert(sizeof(InputParameters) == 24); - - struct OutputParameters { - u32 storage_target; - u64 required_size; - }; - static_assert(sizeof(OutputParameters) == 16); - - IPC::RequestParser rp{ctx}; - const auto params = rp.PopRaw<InputParameters>(); - - LOG_WARNING(Service_AM, "(STUBBED) called with index={}, size={:#x}, journal_size={:#x}", - params.index, params.size, params.journal_size); - - const OutputParameters resp{ - .storage_target = 1, - .required_size = 0, - }; - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.PushRaw(resp); -} - -void IApplicationFunctions::GetSaveDataSizeMax(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - constexpr u64 size_max_normal = 0xFFFFFFF; - constexpr u64 size_max_journal = 0xFFFFFFF; - - IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); - rb.Push(size_max_normal); - rb.Push(size_max_journal); -} - -void IApplicationFunctions::QueryApplicationPlayStatistics(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u32>(0); -} - -void IApplicationFunctions::QueryApplicationPlayStatisticsByUid(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<u32>(0); -} - -void IApplicationFunctions::ExecuteProgram(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::RequestParser rp{ctx}; - [[maybe_unused]] const auto unk_1 = rp.Pop<u32>(); - [[maybe_unused]] const auto unk_2 = rp.Pop<u32>(); - const auto program_index = rp.Pop<u64>(); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - - system.ExecuteProgram(program_index); -} - -void IApplicationFunctions::ClearUserChannel(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - system.GetUserChannel().clear(); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::UnpopToUserChannel(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::RequestParser rp{ctx}; - const auto storage = rp.PopIpcInterface<IStorage>().lock(); - if (storage) { - system.GetUserChannel().push_back(storage->GetData()); - } - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IApplicationFunctions::GetPreviousProgramIndex(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push<s32>(previous_program_index); -} - -void IApplicationFunctions::GetGpuErrorDetectedSystemEvent(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(gpu_error_detected_event->GetReadableEvent()); -} - -void IApplicationFunctions::GetFriendInvitationStorageChannelEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(friend_invitation_storage_channel_event->GetReadableEvent()); -} - -void IApplicationFunctions::TryPopFromFriendInvitationStorageChannel(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(AM::ResultNoDataInChannel); -} - -void IApplicationFunctions::GetNotificationStorageChannelEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(notification_storage_channel_event->GetReadableEvent()); -} - -void IApplicationFunctions::GetHealthWarningDisappearedSystemEvent(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(health_warning_disappeared_system_event->GetReadableEvent()); -} - -void IApplicationFunctions::PrepareForJit(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - void LoopProcess(Nvnflinger::Nvnflinger& nvnflinger, Core::System& system) { - auto message_queue = std::make_shared<AppletMessageQueue>(system); auto server_manager = std::make_unique<ServerManager>(system); - server_manager->RegisterNamedService( - "appletAE", std::make_shared<AppletAE>(nvnflinger, message_queue, system)); - server_manager->RegisterNamedService( - "appletOE", std::make_shared<AppletOE>(nvnflinger, message_queue, system)); + server_manager->RegisterNamedService("appletAE", + std::make_shared<AppletAE>(nvnflinger, system)); + server_manager->RegisterNamedService("appletOE", + std::make_shared<AppletOE>(nvnflinger, system)); server_manager->RegisterNamedService("idle:sys", std::make_shared<IdleSys>(system)); server_manager->RegisterNamedService("omm", std::make_shared<OMM>(system)); server_manager->RegisterNamedService("spsm", std::make_shared<SPSM>(system)); ServerManager::RunServer(std::move(server_manager)); } -IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_) - : ServiceFramework{system_, "IHomeMenuFunctions"}, service_context{system, - "IHomeMenuFunctions"} { - // clang-format off - static const FunctionInfo functions[] = { - {10, &IHomeMenuFunctions::RequestToGetForeground, "RequestToGetForeground"}, - {11, nullptr, "LockForeground"}, - {12, nullptr, "UnlockForeground"}, - {20, nullptr, "PopFromGeneralChannel"}, - {21, &IHomeMenuFunctions::GetPopFromGeneralChannelEvent, "GetPopFromGeneralChannelEvent"}, - {30, nullptr, "GetHomeButtonWriterLockAccessor"}, - {31, nullptr, "GetWriterLockAccessorEx"}, - {40, nullptr, "IsSleepEnabled"}, - {41, nullptr, "IsRebootEnabled"}, - {50, nullptr, "LaunchSystemApplet"}, - {51, nullptr, "LaunchStarter"}, - {100, nullptr, "PopRequestLaunchApplicationForDebug"}, - {110, nullptr, "IsForceTerminateApplicationDisabledForDebug"}, - {200, nullptr, "LaunchDevMenu"}, - {1000, nullptr, "SetLastApplicationExitReason"}, - }; - // clang-format on - - RegisterHandlers(functions); - - pop_from_general_channel_event = - service_context.CreateEvent("IHomeMenuFunctions:PopFromGeneralChannelEvent"); -} - -IHomeMenuFunctions::~IHomeMenuFunctions() { - service_context.CloseEvent(pop_from_general_channel_event); -} - -void IHomeMenuFunctions::RequestToGetForeground(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); -} - -void IHomeMenuFunctions::GetPopFromGeneralChannelEvent(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); - rb.PushCopyObjects(pop_from_general_channel_event->GetReadableEvent()); -} - -IGlobalStateController::IGlobalStateController(Core::System& system_) - : ServiceFramework{system_, "IGlobalStateController"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, nullptr, "RequestToEnterSleep"}, - {1, nullptr, "EnterSleep"}, - {2, nullptr, "StartSleepSequence"}, - {3, nullptr, "StartShutdownSequence"}, - {4, nullptr, "StartRebootSequence"}, - {9, nullptr, "IsAutoPowerDownRequested"}, - {10, nullptr, "LoadAndApplyIdlePolicySettings"}, - {11, nullptr, "NotifyCecSettingsChanged"}, - {12, nullptr, "SetDefaultHomeButtonLongPressTime"}, - {13, nullptr, "UpdateDefaultDisplayResolution"}, - {14, nullptr, "ShouldSleepOnBoot"}, - {15, nullptr, "GetHdcpAuthenticationFailedEvent"}, - {30, nullptr, "OpenCradleFirmwareUpdater"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IGlobalStateController::~IGlobalStateController() = default; - -IApplicationCreator::IApplicationCreator(Core::System& system_) - : ServiceFramework{system_, "IApplicationCreator"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, nullptr, "CreateApplication"}, - {1, nullptr, "PopLaunchRequestedApplication"}, - {10, nullptr, "CreateSystemApplication"}, - {100, nullptr, "PopFloatingApplicationForDevelopment"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IApplicationCreator::~IApplicationCreator() = default; - -IProcessWindingController::IProcessWindingController(Core::System& system_) - : ServiceFramework{system_, "IProcessWindingController"} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &IProcessWindingController::GetLaunchReason, "GetLaunchReason"}, - {11, &IProcessWindingController::OpenCallingLibraryApplet, "OpenCallingLibraryApplet"}, - {21, nullptr, "PushContext"}, - {22, nullptr, "PopContext"}, - {23, nullptr, "CancelWindingReservation"}, - {30, nullptr, "WindAndDoReserved"}, - {40, nullptr, "ReserveToStartAndWaitAndUnwindThis"}, - {41, nullptr, "ReserveToStartAndWait"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IProcessWindingController::~IProcessWindingController() = default; - -void IProcessWindingController::GetLaunchReason(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - struct AppletProcessLaunchReason { - u8 flag; - INSERT_PADDING_BYTES(3); - }; - static_assert(sizeof(AppletProcessLaunchReason) == 0x4, - "AppletProcessLaunchReason is an invalid size"); - - AppletProcessLaunchReason reason{ - .flag = 0, - }; - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.PushRaw(reason); -} - -void IProcessWindingController::OpenCallingLibraryApplet(HLERequestContext& ctx) { - const auto applet_id = system.GetAppletManager().GetCurrentAppletId(); - const auto applet_mode = Applets::LibraryAppletMode::AllForeground; - - LOG_WARNING(Service_AM, "(STUBBED) called with applet_id={:08X}, applet_mode={:08X}", applet_id, - applet_mode); - - const auto& applet_manager{system.GetAppletManager()}; - const auto applet = applet_manager.GetApplet(applet_id, applet_mode); - - if (applet == nullptr) { - LOG_ERROR(Service_AM, "Applet doesn't exist! applet_id={}", applet_id); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletAccessor>(system, applet); -} - } // namespace Service::AM diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h index 905a71b9f..4a2d797bd 100644 --- a/src/core/hle/service/am/am.h +++ b/src/core/hle/service/am/am.h @@ -1,20 +1,11 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#include <chrono> -#include <memory> -#include <queue> - -#include "core/hle/service/kernel_helpers.h" -#include "core/hle/service/service.h" - -namespace Kernel { -class KernelCore; -class KReadableEvent; -class KTransferMemory; -} // namespace Kernel +namespace Core { +class System; +} namespace Service::Nvnflinger { class Nvnflinger; @@ -22,443 +13,6 @@ class Nvnflinger; namespace Service::AM { -class AppletMessageQueue { -public: - // This is nn::am::AppletMessage - enum class AppletMessage : u32 { - None = 0, - ChangeIntoForeground = 1, - ChangeIntoBackground = 2, - Exit = 4, - ApplicationExited = 6, - FocusStateChanged = 15, - Resume = 16, - DetectShortPressingHomeButton = 20, - DetectLongPressingHomeButton = 21, - DetectShortPressingPowerButton = 22, - DetectMiddlePressingPowerButton = 23, - DetectLongPressingPowerButton = 24, - RequestToPrepareSleep = 25, - FinishedSleepSequence = 26, - SleepRequiredByHighTemperature = 27, - SleepRequiredByLowBattery = 28, - AutoPowerDown = 29, - OperationModeChanged = 30, - PerformanceModeChanged = 31, - DetectReceivingCecSystemStandby = 32, - SdCardRemoved = 33, - LaunchApplicationRequested = 50, - RequestToDisplay = 51, - ShowApplicationLogo = 55, - HideApplicationLogo = 56, - ForceHideApplicationLogo = 57, - FloatingApplicationDetected = 60, - DetectShortPressingCaptureButton = 90, - AlbumScreenShotTaken = 92, - AlbumRecordingSaved = 93, - }; - - explicit AppletMessageQueue(Core::System& system); - ~AppletMessageQueue(); - - Kernel::KReadableEvent& GetMessageReceiveEvent(); - Kernel::KReadableEvent& GetOperationModeChangedEvent(); - void PushMessage(AppletMessage msg); - AppletMessage PopMessage(); - std::size_t GetMessageCount() const; - void RequestExit(); - void RequestResume(); - void FocusStateChanged(); - void OperationModeChanged(); - -private: - KernelHelpers::ServiceContext service_context; - - Kernel::KEvent* on_new_message; - Kernel::KEvent* on_operation_mode_changed; - - std::queue<AppletMessage> messages; -}; - -class IWindowController final : public ServiceFramework<IWindowController> { -public: - explicit IWindowController(Core::System& system_); - ~IWindowController() override; - -private: - void GetAppletResourceUserId(HLERequestContext& ctx); - void GetAppletResourceUserIdOfCallerApplet(HLERequestContext& ctx); - void AcquireForegroundRights(HLERequestContext& ctx); -}; - -class IAudioController final : public ServiceFramework<IAudioController> { -public: - explicit IAudioController(Core::System& system_); - ~IAudioController() override; - -private: - void SetExpectedMasterVolume(HLERequestContext& ctx); - void GetMainAppletExpectedMasterVolume(HLERequestContext& ctx); - void GetLibraryAppletExpectedMasterVolume(HLERequestContext& ctx); - void ChangeMainAppletMasterVolume(HLERequestContext& ctx); - void SetTransparentAudioRate(HLERequestContext& ctx); - - static constexpr float min_allowed_volume = 0.0f; - static constexpr float max_allowed_volume = 1.0f; - - float main_applet_volume{0.25f}; - float library_applet_volume{max_allowed_volume}; - float transparent_volume_rate{min_allowed_volume}; - - // Volume transition fade time in nanoseconds. - // e.g. If the main applet volume was 0% and was changed to 50% - // with a fade of 50ns, then over the course of 50ns, - // the volume will gradually fade up to 50% - std::chrono::nanoseconds fade_time_ns{0}; -}; - -class IDisplayController final : public ServiceFramework<IDisplayController> { -public: - explicit IDisplayController(Core::System& system_); - ~IDisplayController() override; - -private: - void GetCallerAppletCaptureImageEx(HLERequestContext& ctx); - void TakeScreenShotOfOwnLayer(HLERequestContext& ctx); - void AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx); - void ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx); - void AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx); - void ReleaseCallerAppletCaptureSharedBuffer(HLERequestContext& ctx); -}; - -class IDebugFunctions final : public ServiceFramework<IDebugFunctions> { -public: - explicit IDebugFunctions(Core::System& system_); - ~IDebugFunctions() override; -}; - -class ISelfController final : public ServiceFramework<ISelfController> { -public: - explicit ISelfController(Core::System& system_, Nvnflinger::Nvnflinger& nvnflinger_); - ~ISelfController() override; - -private: - void Exit(HLERequestContext& ctx); - void LockExit(HLERequestContext& ctx); - void UnlockExit(HLERequestContext& ctx); - void EnterFatalSection(HLERequestContext& ctx); - void LeaveFatalSection(HLERequestContext& ctx); - void GetLibraryAppletLaunchableEvent(HLERequestContext& ctx); - void SetScreenShotPermission(HLERequestContext& ctx); - void SetOperationModeChangedNotification(HLERequestContext& ctx); - void SetPerformanceModeChangedNotification(HLERequestContext& ctx); - void SetFocusHandlingMode(HLERequestContext& ctx); - void SetRestartMessageEnabled(HLERequestContext& ctx); - void SetOutOfFocusSuspendingEnabled(HLERequestContext& ctx); - void SetAlbumImageOrientation(HLERequestContext& ctx); - void IsSystemBufferSharingEnabled(HLERequestContext& ctx); - void GetSystemSharedBufferHandle(HLERequestContext& ctx); - void GetSystemSharedLayerHandle(HLERequestContext& ctx); - void CreateManagedDisplayLayer(HLERequestContext& ctx); - void CreateManagedDisplaySeparableLayer(HLERequestContext& ctx); - void SetHandlesRequestToDisplay(HLERequestContext& ctx); - void ApproveToDisplay(HLERequestContext& ctx); - void SetIdleTimeDetectionExtension(HLERequestContext& ctx); - void GetIdleTimeDetectionExtension(HLERequestContext& ctx); - void ReportUserIsActive(HLERequestContext& ctx); - void SetAutoSleepDisabled(HLERequestContext& ctx); - void IsAutoSleepDisabled(HLERequestContext& ctx); - void GetAccumulatedSuspendedTickValue(HLERequestContext& ctx); - void GetAccumulatedSuspendedTickChangedEvent(HLERequestContext& ctx); - void SetAlbumImageTakenNotificationEnabled(HLERequestContext& ctx); - void SaveCurrentScreenshot(HLERequestContext& ctx); - void SetRecordVolumeMuted(HLERequestContext& ctx); - - Result EnsureBufferSharingEnabled(); - - enum class ScreenshotPermission : u32 { - Inherit = 0, - Enable = 1, - Disable = 2, - }; - - Nvnflinger::Nvnflinger& nvnflinger; - - KernelHelpers::ServiceContext service_context; - - Kernel::KEvent* launchable_event; - Kernel::KEvent* accumulated_suspended_tick_changed_event; - - u32 idle_time_detection_extension = 0; - u64 num_fatal_sections_entered = 0; - u64 system_shared_buffer_id = 0; - u64 system_shared_layer_id = 0; - bool is_auto_sleep_disabled = false; - bool buffer_sharing_enabled = false; - ScreenshotPermission screenshot_permission = ScreenshotPermission::Inherit; -}; - -class ILockAccessor final : public ServiceFramework<ILockAccessor> { -public: - explicit ILockAccessor(Core::System& system_); - ~ILockAccessor() override; - -private: - void TryLock(HLERequestContext& ctx); - void Unlock(HLERequestContext& ctx); - void GetEvent(HLERequestContext& ctx); - void IsLocked(HLERequestContext& ctx); - - bool is_locked{}; - - Kernel::KEvent* lock_event; - KernelHelpers::ServiceContext service_context; -}; - -class ICommonStateGetter final : public ServiceFramework<ICommonStateGetter> { -public: - explicit ICommonStateGetter(Core::System& system_, - std::shared_ptr<AppletMessageQueue> msg_queue_); - ~ICommonStateGetter() override; - -private: - // This is nn::oe::FocusState - enum class FocusState : u8 { - InFocus = 1, - NotInFocus = 2, - Background = 3, - }; - - // This is nn::oe::OperationMode - enum class OperationMode : u8 { - Handheld = 0, - Docked = 1, - }; - - // This is nn::am::service::SystemButtonType - enum class SystemButtonType { - None, - HomeButtonShortPressing, - HomeButtonLongPressing, - PowerButtonShortPressing, - PowerButtonLongPressing, - ShutdownSystem, - CaptureButtonShortPressing, - CaptureButtonLongPressing, - }; - - enum class SysPlatformRegion : s32 { - Global = 1, - Terra = 2, - }; - - void GetEventHandle(HLERequestContext& ctx); - void ReceiveMessage(HLERequestContext& ctx); - void GetCurrentFocusState(HLERequestContext& ctx); - void RequestToAcquireSleepLock(HLERequestContext& ctx); - void GetAcquiredSleepLockEvent(HLERequestContext& ctx); - void GetReaderLockAccessorEx(HLERequestContext& ctx); - void GetDefaultDisplayResolutionChangeEvent(HLERequestContext& ctx); - void GetOperationMode(HLERequestContext& ctx); - void GetPerformanceMode(HLERequestContext& ctx); - void GetBootMode(HLERequestContext& ctx); - void IsVrModeEnabled(HLERequestContext& ctx); - void SetVrModeEnabled(HLERequestContext& ctx); - void SetLcdBacklighOffEnabled(HLERequestContext& ctx); - void BeginVrModeEx(HLERequestContext& ctx); - void EndVrModeEx(HLERequestContext& ctx); - void GetDefaultDisplayResolution(HLERequestContext& ctx); - void SetCpuBoostMode(HLERequestContext& ctx); - void GetBuiltInDisplayType(HLERequestContext& ctx); - void PerformSystemButtonPressingIfInFocus(HLERequestContext& ctx); - void GetSettingsPlatformRegion(HLERequestContext& ctx); - void SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(HLERequestContext& ctx); - - std::shared_ptr<AppletMessageQueue> msg_queue; - bool vr_mode_state{}; - Kernel::KEvent* sleep_lock_event; - KernelHelpers::ServiceContext service_context; -}; - -class IStorageImpl { -public: - virtual ~IStorageImpl(); - virtual std::vector<u8>& GetData() = 0; - virtual const std::vector<u8>& GetData() const = 0; - virtual std::size_t GetSize() const = 0; -}; - -class IStorage final : public ServiceFramework<IStorage> { -public: - explicit IStorage(Core::System& system_, std::vector<u8>&& buffer); - ~IStorage() override; - - std::vector<u8>& GetData() { - return impl->GetData(); - } - - const std::vector<u8>& GetData() const { - return impl->GetData(); - } - - std::size_t GetSize() const { - return impl->GetSize(); - } - -private: - void Register(); - void Open(HLERequestContext& ctx); - - std::shared_ptr<IStorageImpl> impl; -}; - -class IStorageAccessor final : public ServiceFramework<IStorageAccessor> { -public: - explicit IStorageAccessor(Core::System& system_, IStorage& backing_); - ~IStorageAccessor() override; - -private: - void GetSize(HLERequestContext& ctx); - void Write(HLERequestContext& ctx); - void Read(HLERequestContext& ctx); - - IStorage& backing; -}; - -class ILibraryAppletCreator final : public ServiceFramework<ILibraryAppletCreator> { -public: - explicit ILibraryAppletCreator(Core::System& system_); - ~ILibraryAppletCreator() override; - -private: - void CreateLibraryApplet(HLERequestContext& ctx); - void CreateStorage(HLERequestContext& ctx); - void CreateTransferMemoryStorage(HLERequestContext& ctx); - void CreateHandleStorage(HLERequestContext& ctx); -}; - -class ILibraryAppletSelfAccessor final : public ServiceFramework<ILibraryAppletSelfAccessor> { -public: - explicit ILibraryAppletSelfAccessor(Core::System& system_); - ~ILibraryAppletSelfAccessor() override; - -private: - void PopInData(HLERequestContext& ctx); - void PushOutData(HLERequestContext& ctx); - void GetLibraryAppletInfo(HLERequestContext& ctx); - void GetMainAppletIdentityInfo(HLERequestContext& ctx); - void ExitProcessAndReturn(HLERequestContext& ctx); - void GetCallerAppletIdentityInfo(HLERequestContext& ctx); - void GetDesirableKeyboardLayout(HLERequestContext& ctx); - void GetMainAppletAvailableUsers(HLERequestContext& ctx); - void ShouldSetGpuTimeSliceManually(HLERequestContext& ctx); - - void PushInShowAlbum(); - void PushInShowCabinetData(); - void PushInShowMiiEditData(); - void PushInShowSoftwareKeyboard(); - void PushInShowController(); - - std::deque<std::vector<u8>> queue_data; -}; - -class IAppletCommonFunctions final : public ServiceFramework<IAppletCommonFunctions> { -public: - explicit IAppletCommonFunctions(Core::System& system_); - ~IAppletCommonFunctions() override; - -private: - void SetCpuBoostRequestPriority(HLERequestContext& ctx); -}; - -class IApplicationFunctions final : public ServiceFramework<IApplicationFunctions> { -public: - explicit IApplicationFunctions(Core::System& system_); - ~IApplicationFunctions() override; - -private: - void PopLaunchParameter(HLERequestContext& ctx); - void CreateApplicationAndRequestToStartForQuest(HLERequestContext& ctx); - void EnsureSaveData(HLERequestContext& ctx); - void SetTerminateResult(HLERequestContext& ctx); - void GetDisplayVersion(HLERequestContext& ctx); - void GetDesiredLanguage(HLERequestContext& ctx); - void IsGamePlayRecordingSupported(HLERequestContext& ctx); - void InitializeGamePlayRecording(HLERequestContext& ctx); - void SetGamePlayRecordingState(HLERequestContext& ctx); - void NotifyRunning(HLERequestContext& ctx); - void GetPseudoDeviceId(HLERequestContext& ctx); - void ExtendSaveData(HLERequestContext& ctx); - void GetSaveDataSize(HLERequestContext& ctx); - void CreateCacheStorage(HLERequestContext& ctx); - void GetSaveDataSizeMax(HLERequestContext& ctx); - void BeginBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx); - void EndBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx); - void BeginBlockingHomeButton(HLERequestContext& ctx); - void EndBlockingHomeButton(HLERequestContext& ctx); - void EnableApplicationCrashReport(HLERequestContext& ctx); - void InitializeApplicationCopyrightFrameBuffer(HLERequestContext& ctx); - void SetApplicationCopyrightImage(HLERequestContext& ctx); - void SetApplicationCopyrightVisibility(HLERequestContext& ctx); - void QueryApplicationPlayStatistics(HLERequestContext& ctx); - void QueryApplicationPlayStatisticsByUid(HLERequestContext& ctx); - void ExecuteProgram(HLERequestContext& ctx); - void ClearUserChannel(HLERequestContext& ctx); - void UnpopToUserChannel(HLERequestContext& ctx); - void GetPreviousProgramIndex(HLERequestContext& ctx); - void GetGpuErrorDetectedSystemEvent(HLERequestContext& ctx); - void GetFriendInvitationStorageChannelEvent(HLERequestContext& ctx); - void TryPopFromFriendInvitationStorageChannel(HLERequestContext& ctx); - void GetNotificationStorageChannelEvent(HLERequestContext& ctx); - void GetHealthWarningDisappearedSystemEvent(HLERequestContext& ctx); - void PrepareForJit(HLERequestContext& ctx); - - KernelHelpers::ServiceContext service_context; - - bool launch_popped_account_preselect = false; - s32 previous_program_index{-1}; - Kernel::KEvent* gpu_error_detected_event; - Kernel::KEvent* friend_invitation_storage_channel_event; - Kernel::KEvent* notification_storage_channel_event; - Kernel::KEvent* health_warning_disappeared_system_event; -}; - -class IHomeMenuFunctions final : public ServiceFramework<IHomeMenuFunctions> { -public: - explicit IHomeMenuFunctions(Core::System& system_); - ~IHomeMenuFunctions() override; - -private: - void RequestToGetForeground(HLERequestContext& ctx); - void GetPopFromGeneralChannelEvent(HLERequestContext& ctx); - - KernelHelpers::ServiceContext service_context; - - Kernel::KEvent* pop_from_general_channel_event; -}; - -class IGlobalStateController final : public ServiceFramework<IGlobalStateController> { -public: - explicit IGlobalStateController(Core::System& system_); - ~IGlobalStateController() override; -}; - -class IApplicationCreator final : public ServiceFramework<IApplicationCreator> { -public: - explicit IApplicationCreator(Core::System& system_); - ~IApplicationCreator() override; -}; - -class IProcessWindingController final : public ServiceFramework<IProcessWindingController> { -public: - explicit IProcessWindingController(Core::System& system_); - ~IProcessWindingController() override; - -private: - void GetLaunchReason(HLERequestContext& ctx); - void OpenCallingLibraryApplet(HLERequestContext& ctx); -}; - void LoopProcess(Nvnflinger::Nvnflinger& nvnflinger, Core::System& system); } // namespace Service::AM diff --git a/src/core/hle/service/am/am_results.h b/src/core/hle/service/am/am_results.h new file mode 100644 index 000000000..a2afc9eec --- /dev/null +++ b/src/core/hle/service/am/am_results.h @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/result.h" + +namespace Service::AM { + +constexpr Result ResultNoDataInChannel{ErrorModule::AM, 2}; +constexpr Result ResultNoMessages{ErrorModule::AM, 3}; +constexpr Result ResultInvalidOffset{ErrorModule::AM, 503}; +constexpr Result ResultInvalidStorageType{ErrorModule::AM, 511}; +constexpr Result ResultFatalSectionCountImbalance{ErrorModule::AM, 512}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/am_types.h b/src/core/hle/service/am/am_types.h new file mode 100644 index 000000000..a2b852b12 --- /dev/null +++ b/src/core/hle/service/am/am_types.h @@ -0,0 +1,178 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/common_funcs.h" +#include "common/common_types.h" + +namespace Service::AM { + +namespace Frontend { +class FrontendApplet; +} + +enum class AppletType { + Application, + LibraryApplet, + SystemApplet, +}; + +enum class GameplayRecordingState : u32 { + Disabled, + Enabled, +}; + +// This is nn::oe::FocusState +enum class FocusState : u8 { + InFocus = 1, + NotInFocus = 2, + Background = 3, +}; + +// This is nn::oe::OperationMode +enum class OperationMode : u8 { + Handheld = 0, + Docked = 1, +}; + +// This is nn::am::service::SystemButtonType +enum class SystemButtonType { + None, + HomeButtonShortPressing, + HomeButtonLongPressing, + PowerButtonShortPressing, + PowerButtonLongPressing, + ShutdownSystem, + CaptureButtonShortPressing, + CaptureButtonLongPressing, +}; + +enum class SysPlatformRegion : s32 { + Global = 1, + Terra = 2, +}; + +struct AppletProcessLaunchReason { + u8 flag; + INSERT_PADDING_BYTES(3); +}; +static_assert(sizeof(AppletProcessLaunchReason) == 0x4, + "AppletProcessLaunchReason is an invalid size"); + +enum class ScreenshotPermission : u32 { + Inherit = 0, + Enable = 1, + Disable = 2, +}; + +struct FocusHandlingMode { + bool unknown0; + bool unknown1; + bool unknown2; + bool unknown3; +}; + +enum class IdleTimeDetectionExtension : u32 { + Disabled = 0, + Extended = 1, + ExtendedUnsafe = 2, +}; + +enum class AppletId : u32 { + None = 0x00, + Application = 0x01, + OverlayDisplay = 0x02, + QLaunch = 0x03, + Starter = 0x04, + Auth = 0x0A, + Cabinet = 0x0B, + Controller = 0x0C, + DataErase = 0x0D, + Error = 0x0E, + NetConnect = 0x0F, + ProfileSelect = 0x10, + SoftwareKeyboard = 0x11, + MiiEdit = 0x12, + Web = 0x13, + Shop = 0x14, + PhotoViewer = 0x15, + Settings = 0x16, + OfflineWeb = 0x17, + LoginShare = 0x18, + WebAuth = 0x19, + MyPage = 0x1A, +}; + +enum class AppletProgramId : u64 { + QLaunch = 0x0100000000001000ull, + Auth = 0x0100000000001001ull, + Cabinet = 0x0100000000001002ull, + Controller = 0x0100000000001003ull, + DataErase = 0x0100000000001004ull, + Error = 0x0100000000001005ull, + NetConnect = 0x0100000000001006ull, + ProfileSelect = 0x0100000000001007ull, + SoftwareKeyboard = 0x0100000000001008ull, + MiiEdit = 0x0100000000001009ull, + Web = 0x010000000000100Aull, + Shop = 0x010000000000100Bull, + OverlayDisplay = 0x010000000000100Cull, + PhotoViewer = 0x010000000000100Dull, + Settings = 0x010000000000100Eull, + OfflineWeb = 0x010000000000100Full, + LoginShare = 0x0100000000001010ull, + WebAuth = 0x0100000000001011ull, + Starter = 0x0100000000001012ull, + MyPage = 0x0100000000001013ull, + MaxProgramId = 0x0100000000001FFFull, +}; + +enum class LibraryAppletMode : u32 { + AllForeground = 0, + Background = 1, + NoUI = 2, + BackgroundIndirectDisplay = 3, + AllForegroundInitiallyHidden = 4, +}; + +enum class CommonArgumentVersion : u32 { + Version0, + Version1, + Version2, + Version3, +}; + +enum class CommonArgumentSize : u32 { + Version3 = 0x20, +}; + +enum class ThemeColor : u32 { + BasicWhite = 0, + BasicBlack = 3, +}; + +struct CommonArguments { + CommonArgumentVersion arguments_version; + CommonArgumentSize size; + u32 library_version; + ThemeColor theme_color; + bool play_startup_sound; + u64 system_tick; +}; +static_assert(sizeof(CommonArguments) == 0x20, "CommonArguments has incorrect size."); + +struct AppletIdentityInfo { + AppletId applet_id; + INSERT_PADDING_BYTES(0x4); + u64 application_id; +}; +static_assert(sizeof(AppletIdentityInfo) == 0x10, "AppletIdentityInfo has incorrect size."); + +using AppletResourceUserId = u64; +using ProgramId = u64; + +struct Applet; +class AppletDataBroker; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet.cpp b/src/core/hle/service/am/applet.cpp new file mode 100644 index 000000000..5b9056c12 --- /dev/null +++ b/src/core/hle/service/am/applet.cpp @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/scope_exit.h" + +#include "core/core.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/applet.h" +#include "core/hle/service/am/applet_manager.h" + +namespace Service::AM { + +Applet::Applet(Core::System& system, std::unique_ptr<Process> process_) + : context(system, "Applet"), message_queue(system), process(std::move(process_)), + hid_registration(system, *process), gpu_error_detected_event(context), + friend_invitation_storage_channel_event(context), notification_storage_channel_event(context), + health_warning_disappeared_system_event(context), acquired_sleep_lock_event(context), + pop_from_general_channel_event(context), library_applet_launchable_event(context), + accumulated_suspended_tick_changed_event(context), sleep_lock_event(context) { + + aruid = process->GetProcessId(); + program_id = process->GetProgramId(); +} + +Applet::~Applet() = default; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet.h b/src/core/hle/service/am/applet.h new file mode 100644 index 000000000..bce6f9050 --- /dev/null +++ b/src/core/hle/service/am/applet.h @@ -0,0 +1,133 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <list> +#include <mutex> + +#include "common/math_util.h" +#include "core/hle/service/apm/apm_controller.h" +#include "core/hle/service/caps/caps_types.h" +#include "core/hle/service/event.h" +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +#include "core/hle/service/am/am_types.h" +#include "core/hle/service/am/applet_message_queue.h" +#include "core/hle/service/am/hid_registration.h" +#include "core/hle/service/am/managed_layer_holder.h" +#include "core/hle/service/am/process.h" +#include "core/hle/service/am/storage.h" +#include "core/hle/service/am/system_buffer_manager.h" + +namespace Service::AM { + +struct Applet { + explicit Applet(Core::System& system, std::unique_ptr<Process> process_); + ~Applet(); + + // Lock + std::mutex lock{}; + + // Event creation helper + KernelHelpers::ServiceContext context; + + // Applet message queue + AppletMessageQueue message_queue; + + // Process + std::unique_ptr<Process> process; + + // Creation state + AppletId applet_id{}; + AppletResourceUserId aruid{}; + AppletProcessLaunchReason launch_reason{}; + AppletType type{}; + ProgramId program_id{}; + LibraryAppletMode library_applet_mode{}; + s32 previous_program_index{-1}; + ScreenshotPermission previous_screenshot_permission{ScreenshotPermission::Enable}; + + // TODO: some fields above can be AppletIdentityInfo + AppletIdentityInfo screen_shot_identity; + + // hid state + HidRegistration hid_registration; + + // vi state + SystemBufferManager system_buffer_manager{}; + ManagedLayerHolder managed_layer_holder{}; + + // Applet common functions + Result terminate_result{}; + s32 display_logical_width{}; + s32 display_logical_height{}; + Common::Rectangle<f32> display_magnification{0, 0, 1, 1}; + bool home_button_double_click_enabled{}; + bool home_button_short_pressed_blocked{}; + bool home_button_long_pressed_blocked{}; + bool vr_mode_curtain_required{}; + bool sleep_required_by_high_temperature{}; + bool sleep_required_by_low_battery{}; + s32 cpu_boost_request_priority{-1}; + bool handling_capture_button_short_pressed_message_enabled_for_applet{}; + bool handling_capture_button_long_pressed_message_enabled_for_applet{}; + u32 application_core_usage_mode{}; + + // Application functions + bool gameplay_recording_supported{}; + GameplayRecordingState gameplay_recording_state{GameplayRecordingState::Disabled}; + bool jit_service_launched{}; + bool is_running{}; + bool application_crash_report_enabled{}; + + // Common state + FocusState focus_state{}; + bool sleep_lock_enabled{}; + bool vr_mode_enabled{}; + bool lcd_backlight_off_enabled{}; + APM::CpuBoostMode boost_mode{}; + bool request_exit_to_library_applet_at_execute_next_program_enabled{}; + + // Channels + std::deque<std::vector<u8>> user_channel_launch_parameter{}; + std::deque<std::vector<u8>> preselected_user_launch_parameter{}; + + // Caller applet + std::weak_ptr<Applet> caller_applet{}; + std::shared_ptr<AppletDataBroker> caller_applet_broker{}; + + // Self state + bool exit_locked{}; + s32 fatal_section_count{}; + bool operation_mode_changed_notification_enabled{true}; + bool performance_mode_changed_notification_enabled{true}; + FocusHandlingMode focus_handling_mode{}; + bool restart_message_enabled{}; + bool out_of_focus_suspension_enabled{true}; + Capture::AlbumImageOrientation album_image_orientation{}; + bool handles_request_to_display{}; + ScreenshotPermission screenshot_permission{}; + IdleTimeDetectionExtension idle_time_detection_extension{}; + bool auto_sleep_disabled{}; + u64 suspended_ticks{}; + bool album_image_taken_notification_enabled{}; + bool record_volume_muted{}; + + // Events + Event gpu_error_detected_event; + Event friend_invitation_storage_channel_event; + Event notification_storage_channel_event; + Event health_warning_disappeared_system_event; + Event acquired_sleep_lock_event; + Event pop_from_general_channel_event; + Event library_applet_launchable_event; + Event accumulated_suspended_tick_changed_event; + Event sleep_lock_event; + + // Frontend state + std::shared_ptr<Frontend::FrontendApplet> frontend{}; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_ae.cpp b/src/core/hle/service/am/applet_ae.cpp index e30e6478a..1b715dea6 100644 --- a/src/core/hle/service/am/applet_ae.cpp +++ b/src/core/hle/service/am/applet_ae.cpp @@ -1,311 +1,73 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include "common/logging/log.h" -#include "core/core.h" -#include "core/hle/service/am/am.h" #include "core/hle/service/am/applet_ae.h" +#include "core/hle/service/am/applet_manager.h" +#include "core/hle/service/am/library_applet_proxy.h" +#include "core/hle/service/am/system_applet_proxy.h" #include "core/hle/service/ipc_helpers.h" -#include "core/hle/service/nvnflinger/nvnflinger.h" namespace Service::AM { -class ILibraryAppletProxy final : public ServiceFramework<ILibraryAppletProxy> { -public: - explicit ILibraryAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, - std::shared_ptr<AppletMessageQueue> msg_queue_, - Core::System& system_) - : ServiceFramework{system_, "ILibraryAppletProxy"}, - nvnflinger{nvnflinger_}, msg_queue{std::move(msg_queue_)} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &ILibraryAppletProxy::GetCommonStateGetter, "GetCommonStateGetter"}, - {1, &ILibraryAppletProxy::GetSelfController, "GetSelfController"}, - {2, &ILibraryAppletProxy::GetWindowController, "GetWindowController"}, - {3, &ILibraryAppletProxy::GetAudioController, "GetAudioController"}, - {4, &ILibraryAppletProxy::GetDisplayController, "GetDisplayController"}, - {10, &ILibraryAppletProxy::GetProcessWindingController, "GetProcessWindingController"}, - {11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, - {20, &ILibraryAppletProxy::OpenLibraryAppletSelfAccessor, "OpenLibraryAppletSelfAccessor"}, - {21, &ILibraryAppletProxy::GetAppletCommonFunctions, "GetAppletCommonFunctions"}, - {22, &ILibraryAppletProxy::GetHomeMenuFunctions, "GetHomeMenuFunctions"}, - {23, &ILibraryAppletProxy::GetGlobalStateController, "GetGlobalStateController"}, - {1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"}, - }; - // clang-format on - - RegisterHandlers(functions); - } - -private: - void GetCommonStateGetter(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ICommonStateGetter>(system, msg_queue); - } - - void GetSelfController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ISelfController>(system, nvnflinger); - } - - void GetWindowController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IWindowController>(system); - } - - void GetAudioController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IAudioController>(system); - } - - void GetDisplayController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IDisplayController>(system); - } - - void GetProcessWindingController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IProcessWindingController>(system); - } - - void GetLibraryAppletCreator(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletCreator>(system); - } - - void OpenLibraryAppletSelfAccessor(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletSelfAccessor>(system); - } - - void GetAppletCommonFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IAppletCommonFunctions>(system); - } - - void GetHomeMenuFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IHomeMenuFunctions>(system); - } - - void GetGlobalStateController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IGlobalStateController>(system); - } - - void GetDebugFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IDebugFunctions>(system); - } - - Nvnflinger::Nvnflinger& nvnflinger; - std::shared_ptr<AppletMessageQueue> msg_queue; -}; - -class ISystemAppletProxy final : public ServiceFramework<ISystemAppletProxy> { -public: - explicit ISystemAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, - std::shared_ptr<AppletMessageQueue> msg_queue_, - Core::System& system_) - : ServiceFramework{system_, "ISystemAppletProxy"}, - nvnflinger{nvnflinger_}, msg_queue{std::move(msg_queue_)} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &ISystemAppletProxy::GetCommonStateGetter, "GetCommonStateGetter"}, - {1, &ISystemAppletProxy::GetSelfController, "GetSelfController"}, - {2, &ISystemAppletProxy::GetWindowController, "GetWindowController"}, - {3, &ISystemAppletProxy::GetAudioController, "GetAudioController"}, - {4, &ISystemAppletProxy::GetDisplayController, "GetDisplayController"}, - {10, nullptr, "GetProcessWindingController"}, - {11, &ISystemAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, - {20, &ISystemAppletProxy::GetHomeMenuFunctions, "GetHomeMenuFunctions"}, - {21, &ISystemAppletProxy::GetGlobalStateController, "GetGlobalStateController"}, - {22, &ISystemAppletProxy::GetApplicationCreator, "GetApplicationCreator"}, - {23, &ISystemAppletProxy::GetAppletCommonFunctions, "GetAppletCommonFunctions"}, - {1000, &ISystemAppletProxy::GetDebugFunctions, "GetDebugFunctions"}, - }; - // clang-format on - - RegisterHandlers(functions); - } - -private: - void GetCommonStateGetter(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ICommonStateGetter>(system, msg_queue); - } - - void GetSelfController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ISelfController>(system, nvnflinger); - } - - void GetWindowController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IWindowController>(system); - } - - void GetAudioController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IAudioController>(system); - } - - void GetDisplayController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IDisplayController>(system); - } +AppletAE::AppletAE(Nvnflinger::Nvnflinger& nvnflinger_, Core::System& system_) + : ServiceFramework{system_, "appletAE"}, nvnflinger{nvnflinger_} { + // clang-format off + static const FunctionInfo functions[] = { + {100, &AppletAE::OpenSystemAppletProxy, "OpenSystemAppletProxy"}, + {200, &AppletAE::OpenLibraryAppletProxyOld, "OpenLibraryAppletProxyOld"}, + {201, &AppletAE::OpenLibraryAppletProxy, "OpenLibraryAppletProxy"}, + {300, nullptr, "OpenOverlayAppletProxy"}, + {350, nullptr, "OpenSystemApplicationProxy"}, + {400, nullptr, "CreateSelfLibraryAppletCreatorForDevelop"}, + {410, nullptr, "GetSystemAppletControllerForDebug"}, + {1000, nullptr, "GetDebugFunctions"}, + }; + // clang-format on - void GetLibraryAppletCreator(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); + RegisterHandlers(functions); +} - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletCreator>(system); - } +AppletAE::~AppletAE() = default; - void GetHomeMenuFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); +void AppletAE::OpenSystemAppletProxy(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + if (const auto applet = GetAppletFromContext(ctx)) { IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(ResultSuccess); - rb.PushIpcInterface<IHomeMenuFunctions>(system); - } - - void GetGlobalStateController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); + rb.PushIpcInterface<ISystemAppletProxy>(nvnflinger, applet, system); + } else { + UNIMPLEMENTED(); - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IGlobalStateController>(system); - } - - void GetApplicationCreator(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IApplicationCreator>(system); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); } +} - void GetAppletCommonFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); +void AppletAE::OpenLibraryAppletProxy(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + if (const auto applet = GetAppletFromContext(ctx)) { IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(ResultSuccess); - rb.PushIpcInterface<IAppletCommonFunctions>(system); - } - - void GetDebugFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); + rb.PushIpcInterface<ILibraryAppletProxy>(nvnflinger, applet, system); + } else { + UNIMPLEMENTED(); - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IDebugFunctions>(system); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); } - - Nvnflinger::Nvnflinger& nvnflinger; - std::shared_ptr<AppletMessageQueue> msg_queue; -}; - -void AppletAE::OpenSystemAppletProxy(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ISystemAppletProxy>(nvnflinger, msg_queue, system); -} - -void AppletAE::OpenLibraryAppletProxy(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletProxy>(nvnflinger, msg_queue, system); } void AppletAE::OpenLibraryAppletProxyOld(HLERequestContext& ctx) { LOG_DEBUG(Service_AM, "called"); - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletProxy>(nvnflinger, msg_queue, system); + return OpenLibraryAppletProxy(ctx); } -AppletAE::AppletAE(Nvnflinger::Nvnflinger& nvnflinger_, - std::shared_ptr<AppletMessageQueue> msg_queue_, Core::System& system_) - : ServiceFramework{system_, "appletAE"}, nvnflinger{nvnflinger_}, msg_queue{ - std::move(msg_queue_)} { - // clang-format off - static const FunctionInfo functions[] = { - {100, &AppletAE::OpenSystemAppletProxy, "OpenSystemAppletProxy"}, - {200, &AppletAE::OpenLibraryAppletProxyOld, "OpenLibraryAppletProxyOld"}, - {201, &AppletAE::OpenLibraryAppletProxy, "OpenLibraryAppletProxy"}, - {300, nullptr, "OpenOverlayAppletProxy"}, - {350, nullptr, "OpenSystemApplicationProxy"}, - {400, nullptr, "CreateSelfLibraryAppletCreatorForDevelop"}, - {410, nullptr, "GetSystemAppletControllerForDebug"}, - {1000, nullptr, "GetDebugFunctions"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -AppletAE::~AppletAE() = default; - -const std::shared_ptr<AppletMessageQueue>& AppletAE::GetMessageQueue() const { - return msg_queue; +std::shared_ptr<Applet> AppletAE::GetAppletFromContext(HLERequestContext& ctx) { + const auto aruid = ctx.GetPID(); + return system.GetAppletManager().GetByAppletResourceUserId(aruid); } } // namespace Service::AM diff --git a/src/core/hle/service/am/applet_ae.h b/src/core/hle/service/am/applet_ae.h index 538ce2903..3d7961fa1 100644 --- a/src/core/hle/service/am/applet_ae.h +++ b/src/core/hle/service/am/applet_ae.h @@ -18,23 +18,21 @@ class Nvnflinger; namespace AM { -class AppletMessageQueue; +struct Applet; class AppletAE final : public ServiceFramework<AppletAE> { public: - explicit AppletAE(Nvnflinger::Nvnflinger& nvnflinger_, - std::shared_ptr<AppletMessageQueue> msg_queue_, Core::System& system_); + explicit AppletAE(Nvnflinger::Nvnflinger& nvnflinger_, Core::System& system_); ~AppletAE() override; - const std::shared_ptr<AppletMessageQueue>& GetMessageQueue() const; - private: void OpenSystemAppletProxy(HLERequestContext& ctx); void OpenLibraryAppletProxy(HLERequestContext& ctx); void OpenLibraryAppletProxyOld(HLERequestContext& ctx); + std::shared_ptr<Applet> GetAppletFromContext(HLERequestContext& ctx); + Nvnflinger::Nvnflinger& nvnflinger; - std::shared_ptr<AppletMessageQueue> msg_queue; }; } // namespace AM diff --git a/src/core/hle/service/am/applet_common_functions.cpp b/src/core/hle/service/am/applet_common_functions.cpp new file mode 100644 index 000000000..130614ae5 --- /dev/null +++ b/src/core/hle/service/am/applet_common_functions.cpp @@ -0,0 +1,63 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/applet.h" +#include "core/hle/service/am/applet_common_functions.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IAppletCommonFunctions::IAppletCommonFunctions(Core::System& system_, + std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "IAppletCommonFunctions"}, applet{std::move(applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "SetTerminateResult"}, + {10, nullptr, "ReadThemeStorage"}, + {11, nullptr, "WriteThemeStorage"}, + {20, nullptr, "PushToAppletBoundChannel"}, + {21, nullptr, "TryPopFromAppletBoundChannel"}, + {40, nullptr, "GetDisplayLogicalResolution"}, + {42, nullptr, "SetDisplayMagnification"}, + {50, nullptr, "SetHomeButtonDoubleClickEnabled"}, + {51, nullptr, "GetHomeButtonDoubleClickEnabled"}, + {52, nullptr, "IsHomeButtonShortPressedBlocked"}, + {60, nullptr, "IsVrModeCurtainRequired"}, + {61, nullptr, "IsSleepRequiredByHighTemperature"}, + {62, nullptr, "IsSleepRequiredByLowBattery"}, + {70, &IAppletCommonFunctions::SetCpuBoostRequestPriority, "SetCpuBoostRequestPriority"}, + {80, nullptr, "SetHandlingCaptureButtonShortPressedMessageEnabledForApplet"}, + {81, nullptr, "SetHandlingCaptureButtonLongPressedMessageEnabledForApplet"}, + {90, nullptr, "OpenNamedChannelAsParent"}, + {91, nullptr, "OpenNamedChannelAsChild"}, + {100, nullptr, "SetApplicationCoreUsageMode"}, + {300, &IAppletCommonFunctions::GetCurrentApplicationId, "GetCurrentApplicationId"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IAppletCommonFunctions::~IAppletCommonFunctions() = default; + +void IAppletCommonFunctions::SetCpuBoostRequestPriority(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::RequestParser rp{ctx}; + + std::scoped_lock lk{applet->lock}; + applet->cpu_boost_request_priority = rp.Pop<s32>(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IAppletCommonFunctions::GetCurrentApplicationId(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push<u64>(system.GetApplicationProcessProgramID() & ~0xFFFULL); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_common_functions.h b/src/core/hle/service/am/applet_common_functions.h new file mode 100644 index 000000000..b86adf5cb --- /dev/null +++ b/src/core/hle/service/am/applet_common_functions.h @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class IAppletCommonFunctions final : public ServiceFramework<IAppletCommonFunctions> { +public: + explicit IAppletCommonFunctions(Core::System& system_, std::shared_ptr<Applet> applet_); + ~IAppletCommonFunctions() override; + +private: + void SetCpuBoostRequestPriority(HLERequestContext& ctx); + void GetCurrentApplicationId(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_data_broker.cpp b/src/core/hle/service/am/applet_data_broker.cpp new file mode 100644 index 000000000..4d58c4db5 --- /dev/null +++ b/src/core/hle/service/am/applet_data_broker.cpp @@ -0,0 +1,67 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/scope_exit.h" + +#include "core/core.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/applet_data_broker.h" +#include "core/hle/service/am/applet_manager.h" + +namespace Service::AM { + +AppletStorageChannel::AppletStorageChannel(KernelHelpers::ServiceContext& context) + : m_event(context) {} +AppletStorageChannel::~AppletStorageChannel() = default; + +void AppletStorageChannel::Push(std::shared_ptr<IStorage> storage) { + std::scoped_lock lk{m_lock}; + + m_data.emplace_back(std::move(storage)); + m_event.Signal(); +} + +Result AppletStorageChannel::Pop(std::shared_ptr<IStorage>* out_storage) { + std::scoped_lock lk{m_lock}; + + SCOPE_EXIT({ + if (m_data.empty()) { + m_event.Clear(); + } + }); + + R_UNLESS(!m_data.empty(), AM::ResultNoDataInChannel); + + *out_storage = std::move(m_data.front()); + m_data.pop_front(); + + R_SUCCEED(); +} + +Kernel::KReadableEvent* AppletStorageChannel::GetEvent() { + return m_event.GetHandle(); +} + +AppletDataBroker::AppletDataBroker(Core::System& system_) + : system(system_), context(system_, "AppletDataBroker"), in_data(context), + interactive_in_data(context), out_data(context), interactive_out_data(context), + state_changed_event(context), is_completed(false) {} + +AppletDataBroker::~AppletDataBroker() = default; + +void AppletDataBroker::SignalCompletion() { + { + std::scoped_lock lk{lock}; + + if (is_completed) { + return; + } + + is_completed = true; + state_changed_event.Signal(); + } + + system.GetAppletManager().FocusStateChanged(); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_data_broker.h b/src/core/hle/service/am/applet_data_broker.h new file mode 100644 index 000000000..12326fd04 --- /dev/null +++ b/src/core/hle/service/am/applet_data_broker.h @@ -0,0 +1,80 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <deque> +#include <memory> +#include <mutex> + +#include "core/hle/service/event.h" +#include "core/hle/service/kernel_helpers.h" + +union Result; + +namespace Service::AM { + +struct Applet; +class IStorage; + +class AppletStorageChannel { +public: + explicit AppletStorageChannel(KernelHelpers::ServiceContext& ctx); + ~AppletStorageChannel(); + + void Push(std::shared_ptr<IStorage> storage); + Result Pop(std::shared_ptr<IStorage>* out_storage); + Kernel::KReadableEvent* GetEvent(); + +private: + std::mutex m_lock{}; + std::deque<std::shared_ptr<IStorage>> m_data{}; + Event m_event; +}; + +class AppletDataBroker { +public: + explicit AppletDataBroker(Core::System& system_); + ~AppletDataBroker(); + + AppletStorageChannel& GetInData() { + return in_data; + } + + AppletStorageChannel& GetInteractiveInData() { + return interactive_in_data; + } + + AppletStorageChannel& GetOutData() { + return out_data; + } + + AppletStorageChannel& GetInteractiveOutData() { + return interactive_out_data; + } + + Event& GetStateChangedEvent() { + return state_changed_event; + } + + bool IsCompleted() const { + return is_completed; + } + + void SignalCompletion(); + +private: + Core::System& system; + KernelHelpers::ServiceContext context; + + AppletStorageChannel in_data; + AppletStorageChannel interactive_in_data; + AppletStorageChannel out_data; + AppletStorageChannel interactive_out_data; + Event state_changed_event; + + std::mutex lock; + bool is_completed; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_manager.cpp b/src/core/hle/service/am/applet_manager.cpp new file mode 100644 index 000000000..52200d5b2 --- /dev/null +++ b/src/core/hle/service/am/applet_manager.cpp @@ -0,0 +1,361 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/settings.h" +#include "common/uuid.h" +#include "core/core.h" +#include "core/core_timing.h" +#include "core/hle/service/acc/profile_manager.h" +#include "core/hle/service/am/applet_data_broker.h" +#include "core/hle/service/am/applet_manager.h" +#include "core/hle/service/am/frontend/applet_cabinet.h" +#include "core/hle/service/am/frontend/applet_controller.h" +#include "core/hle/service/am/frontend/applet_mii_edit_types.h" +#include "core/hle/service/am/frontend/applet_software_keyboard_types.h" +#include "hid_core/hid_types.h" + +namespace Service::AM { + +namespace { + +constexpr u32 LaunchParameterAccountPreselectedUserMagic = 0xC79497CA; + +struct LaunchParameterAccountPreselectedUser { + u32 magic; + u32 is_account_selected; + Common::UUID current_user; + INSERT_PADDING_BYTES(0x70); +}; +static_assert(sizeof(LaunchParameterAccountPreselectedUser) == 0x88); + +AppletStorageChannel& InitializeFakeCallerApplet(Core::System& system, + std::shared_ptr<Applet>& applet) { + applet->caller_applet_broker = std::make_shared<AppletDataBroker>(system); + return applet->caller_applet_broker->GetInData(); +} + +void PushInShowAlbum(Core::System& system, AppletStorageChannel& channel) { + const CommonArguments arguments{ + .arguments_version = CommonArgumentVersion::Version3, + .size = CommonArgumentSize::Version3, + .library_version = 1, + .theme_color = ThemeColor::BasicBlack, + .play_startup_sound = true, + .system_tick = system.CoreTiming().GetClockTicks(), + }; + + std::vector<u8> argument_data(sizeof(arguments)); + std::vector<u8> settings_data{2}; + std::memcpy(argument_data.data(), &arguments, sizeof(arguments)); + channel.Push(std::make_shared<IStorage>(system, std::move(argument_data))); + channel.Push(std::make_shared<IStorage>(system, std::move(settings_data))); +} + +void PushInShowController(Core::System& system, AppletStorageChannel& channel) { + const CommonArguments common_args = { + .arguments_version = CommonArgumentVersion::Version3, + .size = CommonArgumentSize::Version3, + .library_version = static_cast<u32>(Frontend::ControllerAppletVersion::Version8), + .theme_color = ThemeColor::BasicBlack, + .play_startup_sound = true, + .system_tick = system.CoreTiming().GetClockTicks(), + }; + + Frontend::ControllerSupportArgNew user_args = { + .header = {.player_count_min = 1, + .player_count_max = 4, + .enable_take_over_connection = true, + .enable_left_justify = false, + .enable_permit_joy_dual = true, + .enable_single_mode = false, + .enable_identification_color = false}, + .identification_colors = {}, + .enable_explain_text = false, + .explain_text = {}, + }; + + Frontend::ControllerSupportArgPrivate private_args = { + .arg_private_size = sizeof(Frontend::ControllerSupportArgPrivate), + .arg_size = sizeof(Frontend::ControllerSupportArgNew), + .is_home_menu = true, + .flag_1 = true, + .mode = Frontend::ControllerSupportMode::ShowControllerSupport, + .caller = Frontend::ControllerSupportCaller:: + Application, // switchbrew: Always zero except with + // ShowControllerFirmwareUpdateForSystem/ShowControllerKeyRemappingForSystem, + // which sets this to the input param + .style_set = Core::HID::NpadStyleSet::None, + .joy_hold_type = 0, + }; + std::vector<u8> common_args_data(sizeof(common_args)); + std::vector<u8> private_args_data(sizeof(private_args)); + std::vector<u8> user_args_data(sizeof(user_args)); + + std::memcpy(common_args_data.data(), &common_args, sizeof(common_args)); + std::memcpy(private_args_data.data(), &private_args, sizeof(private_args)); + std::memcpy(user_args_data.data(), &user_args, sizeof(user_args)); + + channel.Push(std::make_shared<IStorage>(system, std::move(common_args_data))); + channel.Push(std::make_shared<IStorage>(system, std::move(private_args_data))); + channel.Push(std::make_shared<IStorage>(system, std::move(user_args_data))); +} + +void PushInShowCabinetData(Core::System& system, AppletStorageChannel& channel) { + const CommonArguments arguments{ + .arguments_version = CommonArgumentVersion::Version3, + .size = CommonArgumentSize::Version3, + .library_version = static_cast<u32>(Frontend::CabinetAppletVersion::Version1), + .theme_color = ThemeColor::BasicBlack, + .play_startup_sound = true, + .system_tick = system.CoreTiming().GetClockTicks(), + }; + + const Frontend::StartParamForAmiiboSettings amiibo_settings{ + .param_1 = 0, + .applet_mode = system.GetFrontendAppletHolder().GetCabinetMode(), + .flags = Frontend::CabinetFlags::None, + .amiibo_settings_1 = 0, + .device_handle = 0, + .tag_info{}, + .register_info{}, + .amiibo_settings_3{}, + }; + + std::vector<u8> argument_data(sizeof(arguments)); + std::vector<u8> settings_data(sizeof(amiibo_settings)); + std::memcpy(argument_data.data(), &arguments, sizeof(arguments)); + std::memcpy(settings_data.data(), &amiibo_settings, sizeof(amiibo_settings)); + channel.Push(std::make_shared<IStorage>(system, std::move(argument_data))); + channel.Push(std::make_shared<IStorage>(system, std::move(settings_data))); +} + +void PushInShowMiiEditData(Core::System& system, AppletStorageChannel& channel) { + struct MiiEditV3 { + Frontend::MiiEditAppletInputCommon common; + Frontend::MiiEditAppletInputV3 input; + }; + static_assert(sizeof(MiiEditV3) == 0x100, "MiiEditV3 has incorrect size."); + + MiiEditV3 mii_arguments{ + .common = + { + .version = Frontend::MiiEditAppletVersion::Version3, + .applet_mode = Frontend::MiiEditAppletMode::ShowMiiEdit, + }, + .input{}, + }; + + std::vector<u8> argument_data(sizeof(mii_arguments)); + std::memcpy(argument_data.data(), &mii_arguments, sizeof(mii_arguments)); + + channel.Push(std::make_shared<IStorage>(system, std::move(argument_data))); +} + +void PushInShowSoftwareKeyboard(Core::System& system, AppletStorageChannel& channel) { + const CommonArguments arguments{ + .arguments_version = CommonArgumentVersion::Version3, + .size = CommonArgumentSize::Version3, + .library_version = static_cast<u32>(Frontend::SwkbdAppletVersion::Version524301), + .theme_color = ThemeColor::BasicBlack, + .play_startup_sound = true, + .system_tick = system.CoreTiming().GetClockTicks(), + }; + + std::vector<char16_t> initial_string(0); + + const Frontend::SwkbdConfigCommon swkbd_config{ + .type = Frontend::SwkbdType::Qwerty, + .ok_text{}, + .left_optional_symbol_key{}, + .right_optional_symbol_key{}, + .use_prediction = false, + .key_disable_flags{}, + .initial_cursor_position = Frontend::SwkbdInitialCursorPosition::Start, + .header_text{}, + .sub_text{}, + .guide_text{}, + .max_text_length = 500, + .min_text_length = 0, + .password_mode = Frontend::SwkbdPasswordMode::Disabled, + .text_draw_type = Frontend::SwkbdTextDrawType::Box, + .enable_return_button = true, + .use_utf8 = false, + .use_blur_background = true, + .initial_string_offset{}, + .initial_string_length = static_cast<u32>(initial_string.size()), + .user_dictionary_offset{}, + .user_dictionary_entries{}, + .use_text_check = false, + }; + + Frontend::SwkbdConfigNew swkbd_config_new{}; + + std::vector<u8> argument_data(sizeof(arguments)); + std::vector<u8> swkbd_data(sizeof(swkbd_config) + sizeof(swkbd_config_new)); + std::vector<u8> work_buffer(swkbd_config.initial_string_length * sizeof(char16_t)); + + std::memcpy(argument_data.data(), &arguments, sizeof(arguments)); + std::memcpy(swkbd_data.data(), &swkbd_config, sizeof(swkbd_config)); + std::memcpy(swkbd_data.data() + sizeof(swkbd_config), &swkbd_config_new, + sizeof(Frontend::SwkbdConfigNew)); + std::memcpy(work_buffer.data(), initial_string.data(), + swkbd_config.initial_string_length * sizeof(char16_t)); + + channel.Push(std::make_shared<IStorage>(system, std::move(argument_data))); + channel.Push(std::make_shared<IStorage>(system, std::move(swkbd_data))); + channel.Push(std::make_shared<IStorage>(system, std::move(work_buffer))); +} + +} // namespace + +AppletManager::AppletManager(Core::System& system) : m_system(system) {} +AppletManager::~AppletManager() { + this->Reset(); +} + +void AppletManager::InsertApplet(std::shared_ptr<Applet> applet) { + std::scoped_lock lk{m_lock}; + + m_applets.emplace(applet->aruid, std::move(applet)); +} + +void AppletManager::TerminateAndRemoveApplet(AppletResourceUserId aruid) { + std::shared_ptr<Applet> applet; + bool should_stop = false; + { + std::scoped_lock lk{m_lock}; + + const auto it = m_applets.find(aruid); + if (it == m_applets.end()) { + return; + } + + applet = it->second; + m_applets.erase(it); + + should_stop = m_applets.empty(); + } + + // Terminate process. + applet->process->Terminate(); + + // If there were no applets left, stop emulation. + if (should_stop) { + m_system.Exit(); + } +} + +void AppletManager::CreateAndInsertByFrontendAppletParameters( + AppletResourceUserId aruid, const FrontendAppletParameters& params) { + // TODO: this should be run inside AM so that the events will have a parent process + // TODO: have am create the guest process + auto applet = std::make_shared<Applet>(m_system, std::make_unique<Process>(m_system)); + + applet->aruid = aruid; + applet->program_id = params.program_id; + applet->applet_id = params.applet_id; + applet->type = params.applet_type; + applet->previous_program_index = params.previous_program_index; + + // Push UserChannel data from previous application + if (params.launch_type == LaunchType::ApplicationInitiated) { + applet->user_channel_launch_parameter.swap(m_system.GetUserChannel()); + } + + // TODO: Read whether we need a preselected user from NACP? + // TODO: This can be done quite easily from loader + { + LaunchParameterAccountPreselectedUser lp{}; + + lp.magic = LaunchParameterAccountPreselectedUserMagic; + lp.is_account_selected = 1; + + Account::ProfileManager profile_manager{}; + const auto uuid = profile_manager.GetUser(static_cast<s32>(Settings::values.current_user)); + ASSERT(uuid.has_value() && uuid->IsValid()); + lp.current_user = *uuid; + + std::vector<u8> buffer(sizeof(LaunchParameterAccountPreselectedUser)); + std::memcpy(buffer.data(), &lp, buffer.size()); + + applet->preselected_user_launch_parameter.push_back(std::move(buffer)); + } + + // Starting from frontend, some applets require input data. + switch (applet->applet_id) { + case AppletId::Cabinet: + PushInShowCabinetData(m_system, InitializeFakeCallerApplet(m_system, applet)); + break; + case AppletId::MiiEdit: + PushInShowMiiEditData(m_system, InitializeFakeCallerApplet(m_system, applet)); + break; + case AppletId::PhotoViewer: + PushInShowAlbum(m_system, InitializeFakeCallerApplet(m_system, applet)); + break; + case AppletId::SoftwareKeyboard: + PushInShowSoftwareKeyboard(m_system, InitializeFakeCallerApplet(m_system, applet)); + break; + case AppletId::Controller: + PushInShowController(m_system, InitializeFakeCallerApplet(m_system, applet)); + break; + default: + break; + } + + // Applet was started by frontend, so it is foreground. + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); + applet->focus_state = FocusState::InFocus; + + this->InsertApplet(std::move(applet)); +} + +std::shared_ptr<Applet> AppletManager::GetByAppletResourceUserId(AppletResourceUserId aruid) const { + std::scoped_lock lk{m_lock}; + + if (const auto it = m_applets.find(aruid); it != m_applets.end()) { + return it->second; + } + + return {}; +} + +void AppletManager::Reset() { + std::scoped_lock lk{m_lock}; + + m_applets.clear(); +} + +void AppletManager::RequestExit() { + std::scoped_lock lk{m_lock}; + + for (const auto& [aruid, applet] : m_applets) { + applet->message_queue.RequestExit(); + } +} + +void AppletManager::RequestResume() { + std::scoped_lock lk{m_lock}; + + for (const auto& [aruid, applet] : m_applets) { + applet->message_queue.RequestResume(); + } +} + +void AppletManager::OperationModeChanged() { + std::scoped_lock lk{m_lock}; + + for (const auto& [aruid, applet] : m_applets) { + applet->message_queue.OperationModeChanged(); + } +} + +void AppletManager::FocusStateChanged() { + std::scoped_lock lk{m_lock}; + + for (const auto& [aruid, applet] : m_applets) { + applet->message_queue.FocusStateChanged(); + } +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_manager.h b/src/core/hle/service/am/applet_manager.h new file mode 100644 index 000000000..4875de309 --- /dev/null +++ b/src/core/hle/service/am/applet_manager.h @@ -0,0 +1,59 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <map> +#include <mutex> + +#include "core/hle/service/am/applet.h" + +namespace Core { +class System; +} + +namespace Service::AM { + +enum class LaunchType { + FrontendInitiated, + ApplicationInitiated, +}; + +struct FrontendAppletParameters { + ProgramId program_id{}; + AppletId applet_id{}; + AppletType applet_type{}; + LaunchType launch_type{}; + s32 program_index{}; + s32 previous_program_index{-1}; +}; + +class AppletManager { +public: + explicit AppletManager(Core::System& system); + ~AppletManager(); + + void InsertApplet(std::shared_ptr<Applet> applet); + void TerminateAndRemoveApplet(AppletResourceUserId aruid); + + void CreateAndInsertByFrontendAppletParameters(AppletResourceUserId aruid, + const FrontendAppletParameters& params); + std::shared_ptr<Applet> GetByAppletResourceUserId(AppletResourceUserId aruid) const; + + void Reset(); + + void RequestExit(); + void RequestResume(); + void OperationModeChanged(); + void FocusStateChanged(); + +private: + Core::System& m_system; + + mutable std::mutex m_lock{}; + std::map<AppletResourceUserId, std::shared_ptr<Applet>> m_applets{}; + + // AudioController state goes here +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_message_queue.cpp b/src/core/hle/service/am/applet_message_queue.cpp new file mode 100644 index 000000000..5ed996b70 --- /dev/null +++ b/src/core/hle/service/am/applet_message_queue.cpp @@ -0,0 +1,73 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/applet_message_queue.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +AppletMessageQueue::AppletMessageQueue(Core::System& system) + : service_context{system, "AppletMessageQueue"} { + on_new_message = service_context.CreateEvent("AMMessageQueue:OnMessageReceived"); + on_operation_mode_changed = service_context.CreateEvent("AMMessageQueue:OperationModeChanged"); +} + +AppletMessageQueue::~AppletMessageQueue() { + service_context.CloseEvent(on_new_message); + service_context.CloseEvent(on_operation_mode_changed); +} + +Kernel::KReadableEvent& AppletMessageQueue::GetMessageReceiveEvent() { + return on_new_message->GetReadableEvent(); +} + +Kernel::KReadableEvent& AppletMessageQueue::GetOperationModeChangedEvent() { + return on_operation_mode_changed->GetReadableEvent(); +} + +void AppletMessageQueue::PushMessage(AppletMessage msg) { + { + std::scoped_lock lk{lock}; + messages.push(msg); + } + on_new_message->Signal(); +} + +AppletMessageQueue::AppletMessage AppletMessageQueue::PopMessage() { + std::scoped_lock lk{lock}; + if (messages.empty()) { + on_new_message->Clear(); + return AppletMessage::None; + } + auto msg = messages.front(); + messages.pop(); + if (messages.empty()) { + on_new_message->Clear(); + } + return msg; +} + +std::size_t AppletMessageQueue::GetMessageCount() const { + std::scoped_lock lk{lock}; + return messages.size(); +} + +void AppletMessageQueue::RequestExit() { + PushMessage(AppletMessage::Exit); +} + +void AppletMessageQueue::RequestResume() { + PushMessage(AppletMessage::Resume); +} + +void AppletMessageQueue::FocusStateChanged() { + PushMessage(AppletMessage::FocusStateChanged); +} + +void AppletMessageQueue::OperationModeChanged() { + PushMessage(AppletMessage::OperationModeChanged); + PushMessage(AppletMessage::PerformanceModeChanged); + on_operation_mode_changed->Signal(); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_message_queue.h b/src/core/hle/service/am/applet_message_queue.h new file mode 100644 index 000000000..5cb236d47 --- /dev/null +++ b/src/core/hle/service/am/applet_message_queue.h @@ -0,0 +1,76 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <queue> + +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +namespace Kernel { +class KReadableEvent; +} // namespace Kernel + +namespace Service::AM { + +class AppletMessageQueue { +public: + // This is nn::am::AppletMessage + enum class AppletMessage : u32 { + None = 0, + ChangeIntoForeground = 1, + ChangeIntoBackground = 2, + Exit = 4, + ApplicationExited = 6, + FocusStateChanged = 15, + Resume = 16, + DetectShortPressingHomeButton = 20, + DetectLongPressingHomeButton = 21, + DetectShortPressingPowerButton = 22, + DetectMiddlePressingPowerButton = 23, + DetectLongPressingPowerButton = 24, + RequestToPrepareSleep = 25, + FinishedSleepSequence = 26, + SleepRequiredByHighTemperature = 27, + SleepRequiredByLowBattery = 28, + AutoPowerDown = 29, + OperationModeChanged = 30, + PerformanceModeChanged = 31, + DetectReceivingCecSystemStandby = 32, + SdCardRemoved = 33, + LaunchApplicationRequested = 50, + RequestToDisplay = 51, + ShowApplicationLogo = 55, + HideApplicationLogo = 56, + ForceHideApplicationLogo = 57, + FloatingApplicationDetected = 60, + DetectShortPressingCaptureButton = 90, + AlbumScreenShotTaken = 92, + AlbumRecordingSaved = 93, + }; + + explicit AppletMessageQueue(Core::System& system); + ~AppletMessageQueue(); + + Kernel::KReadableEvent& GetMessageReceiveEvent(); + Kernel::KReadableEvent& GetOperationModeChangedEvent(); + void PushMessage(AppletMessage msg); + AppletMessage PopMessage(); + std::size_t GetMessageCount() const; + void RequestExit(); + void RequestResume(); + void FocusStateChanged(); + void OperationModeChanged(); + +private: + KernelHelpers::ServiceContext service_context; + + Kernel::KEvent* on_new_message; + Kernel::KEvent* on_operation_mode_changed; + + mutable std::mutex lock; + std::queue<AppletMessage> messages; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applet_oe.cpp b/src/core/hle/service/am/applet_oe.cpp index d6c565d85..56bafd162 100644 --- a/src/core/hle/service/am/applet_oe.cpp +++ b/src/core/hle/service/am/applet_oe.cpp @@ -1,129 +1,42 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include "common/logging/log.h" #include "core/hle/service/am/am.h" +#include "core/hle/service/am/applet_manager.h" #include "core/hle/service/am/applet_oe.h" +#include "core/hle/service/am/application_proxy.h" #include "core/hle/service/ipc_helpers.h" -#include "core/hle/service/nvnflinger/nvnflinger.h" namespace Service::AM { -class IApplicationProxy final : public ServiceFramework<IApplicationProxy> { -public: - explicit IApplicationProxy(Nvnflinger::Nvnflinger& nvnflinger_, - std::shared_ptr<AppletMessageQueue> msg_queue_, - Core::System& system_) - : ServiceFramework{system_, "IApplicationProxy"}, - nvnflinger{nvnflinger_}, msg_queue{std::move(msg_queue_)} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &IApplicationProxy::GetCommonStateGetter, "GetCommonStateGetter"}, - {1, &IApplicationProxy::GetSelfController, "GetSelfController"}, - {2, &IApplicationProxy::GetWindowController, "GetWindowController"}, - {3, &IApplicationProxy::GetAudioController, "GetAudioController"}, - {4, &IApplicationProxy::GetDisplayController, "GetDisplayController"}, - {10, nullptr, "GetProcessWindingController"}, - {11, &IApplicationProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, - {20, &IApplicationProxy::GetApplicationFunctions, "GetApplicationFunctions"}, - {1000, &IApplicationProxy::GetDebugFunctions, "GetDebugFunctions"}, - }; - // clang-format on - - RegisterHandlers(functions); - } - -private: - void GetAudioController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IAudioController>(system); - } - - void GetDisplayController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IDisplayController>(system); - } - - void GetDebugFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IDebugFunctions>(system); - } - - void GetWindowController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IWindowController>(system); - } - - void GetSelfController(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ISelfController>(system, nvnflinger); - } - - void GetCommonStateGetter(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); +AppletOE::AppletOE(Nvnflinger::Nvnflinger& nvnflinger_, Core::System& system_) + : ServiceFramework{system_, "appletOE"}, nvnflinger{nvnflinger_} { + static const FunctionInfo functions[] = { + {0, &AppletOE::OpenApplicationProxy, "OpenApplicationProxy"}, + }; + RegisterHandlers(functions); +} - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ICommonStateGetter>(system, msg_queue); - } +AppletOE::~AppletOE() = default; - void GetLibraryAppletCreator(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); +void AppletOE::OpenApplicationProxy(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + if (const auto applet = GetAppletFromContext(ctx)) { IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletCreator>(system); - } - - void GetApplicationFunctions(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); + rb.PushIpcInterface<IApplicationProxy>(nvnflinger, applet, system); + } else { + UNIMPLEMENTED(); - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IApplicationFunctions>(system); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); } - - Nvnflinger::Nvnflinger& nvnflinger; - std::shared_ptr<AppletMessageQueue> msg_queue; -}; - -void AppletOE::OpenApplicationProxy(HLERequestContext& ctx) { - LOG_DEBUG(Service_AM, "called"); - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<IApplicationProxy>(nvnflinger, msg_queue, system); -} - -AppletOE::AppletOE(Nvnflinger::Nvnflinger& nvnflinger_, - std::shared_ptr<AppletMessageQueue> msg_queue_, Core::System& system_) - : ServiceFramework{system_, "appletOE"}, nvnflinger{nvnflinger_}, msg_queue{ - std::move(msg_queue_)} { - static const FunctionInfo functions[] = { - {0, &AppletOE::OpenApplicationProxy, "OpenApplicationProxy"}, - }; - RegisterHandlers(functions); } -AppletOE::~AppletOE() = default; - -const std::shared_ptr<AppletMessageQueue>& AppletOE::GetMessageQueue() const { - return msg_queue; +std::shared_ptr<Applet> AppletOE::GetAppletFromContext(HLERequestContext& ctx) { + const auto aruid = ctx.GetPID(); + return system.GetAppletManager().GetByAppletResourceUserId(aruid); } } // namespace Service::AM diff --git a/src/core/hle/service/am/applet_oe.h b/src/core/hle/service/am/applet_oe.h index 39eccc4ab..f2ba1c924 100644 --- a/src/core/hle/service/am/applet_oe.h +++ b/src/core/hle/service/am/applet_oe.h @@ -18,21 +18,19 @@ class Nvnflinger; namespace AM { -class AppletMessageQueue; +struct Applet; class AppletOE final : public ServiceFramework<AppletOE> { public: - explicit AppletOE(Nvnflinger::Nvnflinger& nvnflinger_, - std::shared_ptr<AppletMessageQueue> msg_queue_, Core::System& system_); + explicit AppletOE(Nvnflinger::Nvnflinger& nvnflinger_, Core::System& system_); ~AppletOE() override; - const std::shared_ptr<AppletMessageQueue>& GetMessageQueue() const; - private: void OpenApplicationProxy(HLERequestContext& ctx); + std::shared_ptr<Applet> GetAppletFromContext(HLERequestContext& ctx); + Nvnflinger::Nvnflinger& nvnflinger; - std::shared_ptr<AppletMessageQueue> msg_queue; }; } // namespace AM diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp deleted file mode 100644 index 89d5434af..000000000 --- a/src/core/hle/service/am/applets/applets.cpp +++ /dev/null @@ -1,338 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include <cstring> - -#include "common/assert.h" -#include "core/core.h" -#include "core/frontend/applets/cabinet.h" -#include "core/frontend/applets/controller.h" -#include "core/frontend/applets/error.h" -#include "core/frontend/applets/general_frontend.h" -#include "core/frontend/applets/mii_edit.h" -#include "core/frontend/applets/profile_select.h" -#include "core/frontend/applets/software_keyboard.h" -#include "core/frontend/applets/web_browser.h" -#include "core/hle/kernel/k_event.h" -#include "core/hle/service/am/am.h" -#include "core/hle/service/am/applet_ae.h" -#include "core/hle/service/am/applet_oe.h" -#include "core/hle/service/am/applets/applet_cabinet.h" -#include "core/hle/service/am/applets/applet_controller.h" -#include "core/hle/service/am/applets/applet_error.h" -#include "core/hle/service/am/applets/applet_general_backend.h" -#include "core/hle/service/am/applets/applet_mii_edit.h" -#include "core/hle/service/am/applets/applet_profile_select.h" -#include "core/hle/service/am/applets/applet_software_keyboard.h" -#include "core/hle/service/am/applets/applet_web_browser.h" -#include "core/hle/service/am/applets/applets.h" -#include "core/hle/service/sm/sm.h" - -namespace Service::AM::Applets { - -AppletDataBroker::AppletDataBroker(Core::System& system_, LibraryAppletMode applet_mode_) - : system{system_}, applet_mode{applet_mode_}, service_context{system, - "ILibraryAppletAccessor"} { - state_changed_event = service_context.CreateEvent("ILibraryAppletAccessor:StateChangedEvent"); - pop_out_data_event = service_context.CreateEvent("ILibraryAppletAccessor:PopDataOutEvent"); - pop_interactive_out_data_event = - service_context.CreateEvent("ILibraryAppletAccessor:PopInteractiveDataOutEvent"); -} - -AppletDataBroker::~AppletDataBroker() { - service_context.CloseEvent(state_changed_event); - service_context.CloseEvent(pop_out_data_event); - service_context.CloseEvent(pop_interactive_out_data_event); -} - -AppletDataBroker::RawChannelData AppletDataBroker::PeekDataToAppletForDebug() const { - std::vector<std::vector<u8>> out_normal; - - for (const auto& storage : in_channel) { - out_normal.push_back(storage->GetData()); - } - - std::vector<std::vector<u8>> out_interactive; - - for (const auto& storage : in_interactive_channel) { - out_interactive.push_back(storage->GetData()); - } - - return {std::move(out_normal), std::move(out_interactive)}; -} - -std::shared_ptr<IStorage> AppletDataBroker::PopNormalDataToGame() { - if (out_channel.empty()) - return nullptr; - - auto out = std::move(out_channel.front()); - out_channel.pop_front(); - pop_out_data_event->Clear(); - return out; -} - -std::shared_ptr<IStorage> AppletDataBroker::PopNormalDataToApplet() { - if (in_channel.empty()) - return nullptr; - - auto out = std::move(in_channel.front()); - in_channel.pop_front(); - return out; -} - -std::shared_ptr<IStorage> AppletDataBroker::PopInteractiveDataToGame() { - if (out_interactive_channel.empty()) - return nullptr; - - auto out = std::move(out_interactive_channel.front()); - out_interactive_channel.pop_front(); - pop_interactive_out_data_event->Clear(); - return out; -} - -std::shared_ptr<IStorage> AppletDataBroker::PopInteractiveDataToApplet() { - if (in_interactive_channel.empty()) - return nullptr; - - auto out = std::move(in_interactive_channel.front()); - in_interactive_channel.pop_front(); - return out; -} - -void AppletDataBroker::PushNormalDataFromGame(std::shared_ptr<IStorage>&& storage) { - in_channel.emplace_back(std::move(storage)); -} - -void AppletDataBroker::PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage) { - out_channel.emplace_back(std::move(storage)); - pop_out_data_event->Signal(); -} - -void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage) { - in_interactive_channel.emplace_back(std::move(storage)); -} - -void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage) { - out_interactive_channel.emplace_back(std::move(storage)); - pop_interactive_out_data_event->Signal(); -} - -void AppletDataBroker::SignalStateChanged() { - state_changed_event->Signal(); - - switch (applet_mode) { - case LibraryAppletMode::AllForeground: - case LibraryAppletMode::AllForegroundInitiallyHidden: { - auto applet_oe = system.ServiceManager().GetService<AppletOE>("appletOE"); - auto applet_ae = system.ServiceManager().GetService<AppletAE>("appletAE"); - - if (applet_oe) { - applet_oe->GetMessageQueue()->FocusStateChanged(); - break; - } - - if (applet_ae) { - applet_ae->GetMessageQueue()->FocusStateChanged(); - break; - } - break; - } - default: - break; - } -} - -Kernel::KReadableEvent& AppletDataBroker::GetNormalDataEvent() { - return pop_out_data_event->GetReadableEvent(); -} - -Kernel::KReadableEvent& AppletDataBroker::GetInteractiveDataEvent() { - return pop_interactive_out_data_event->GetReadableEvent(); -} - -Kernel::KReadableEvent& AppletDataBroker::GetStateChangedEvent() { - return state_changed_event->GetReadableEvent(); -} - -Applet::Applet(Core::System& system_, LibraryAppletMode applet_mode_) - : broker{system_, applet_mode_}, applet_mode{applet_mode_} {} - -Applet::~Applet() = default; - -void Applet::Initialize() { - const auto common = broker.PopNormalDataToApplet(); - ASSERT(common != nullptr); - - const auto common_data = common->GetData(); - - ASSERT(common_data.size() >= sizeof(CommonArguments)); - std::memcpy(&common_args, common_data.data(), sizeof(CommonArguments)); - - initialized = true; -} - -AppletFrontendSet::AppletFrontendSet() = default; - -AppletFrontendSet::AppletFrontendSet(CabinetApplet cabinet_applet, - ControllerApplet controller_applet, ErrorApplet error_applet, - MiiEdit mii_edit_, - ParentalControlsApplet parental_controls_applet, - PhotoViewer photo_viewer_, ProfileSelect profile_select_, - SoftwareKeyboard software_keyboard_, WebBrowser web_browser_) - : cabinet{std::move(cabinet_applet)}, controller{std::move(controller_applet)}, - error{std::move(error_applet)}, mii_edit{std::move(mii_edit_)}, - parental_controls{std::move(parental_controls_applet)}, - photo_viewer{std::move(photo_viewer_)}, profile_select{std::move(profile_select_)}, - software_keyboard{std::move(software_keyboard_)}, web_browser{std::move(web_browser_)} {} - -AppletFrontendSet::~AppletFrontendSet() = default; - -AppletFrontendSet::AppletFrontendSet(AppletFrontendSet&&) noexcept = default; - -AppletFrontendSet& AppletFrontendSet::operator=(AppletFrontendSet&&) noexcept = default; - -AppletManager::AppletManager(Core::System& system_) : system{system_} {} - -AppletManager::~AppletManager() = default; - -const AppletFrontendSet& AppletManager::GetAppletFrontendSet() const { - return frontend; -} - -NFP::CabinetMode AppletManager::GetCabinetMode() const { - return cabinet_mode; -} - -AppletId AppletManager::GetCurrentAppletId() const { - return current_applet_id; -} - -void AppletManager::SetAppletFrontendSet(AppletFrontendSet set) { - if (set.cabinet != nullptr) { - frontend.cabinet = std::move(set.cabinet); - } - - if (set.controller != nullptr) { - frontend.controller = std::move(set.controller); - } - - if (set.error != nullptr) { - frontend.error = std::move(set.error); - } - - if (set.mii_edit != nullptr) { - frontend.mii_edit = std::move(set.mii_edit); - } - - if (set.parental_controls != nullptr) { - frontend.parental_controls = std::move(set.parental_controls); - } - - if (set.photo_viewer != nullptr) { - frontend.photo_viewer = std::move(set.photo_viewer); - } - - if (set.profile_select != nullptr) { - frontend.profile_select = std::move(set.profile_select); - } - - if (set.software_keyboard != nullptr) { - frontend.software_keyboard = std::move(set.software_keyboard); - } - - if (set.web_browser != nullptr) { - frontend.web_browser = std::move(set.web_browser); - } -} - -void AppletManager::SetCabinetMode(NFP::CabinetMode mode) { - cabinet_mode = mode; -} - -void AppletManager::SetCurrentAppletId(AppletId applet_id) { - current_applet_id = applet_id; -} - -void AppletManager::SetDefaultAppletFrontendSet() { - ClearAll(); - SetDefaultAppletsIfMissing(); -} - -void AppletManager::SetDefaultAppletsIfMissing() { - if (frontend.cabinet == nullptr) { - frontend.cabinet = std::make_unique<Core::Frontend::DefaultCabinetApplet>(); - } - - if (frontend.controller == nullptr) { - frontend.controller = - std::make_unique<Core::Frontend::DefaultControllerApplet>(system.HIDCore()); - } - - if (frontend.error == nullptr) { - frontend.error = std::make_unique<Core::Frontend::DefaultErrorApplet>(); - } - - if (frontend.mii_edit == nullptr) { - frontend.mii_edit = std::make_unique<Core::Frontend::DefaultMiiEditApplet>(); - } - - if (frontend.parental_controls == nullptr) { - frontend.parental_controls = - std::make_unique<Core::Frontend::DefaultParentalControlsApplet>(); - } - - if (frontend.photo_viewer == nullptr) { - frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>(); - } - - if (frontend.profile_select == nullptr) { - frontend.profile_select = std::make_unique<Core::Frontend::DefaultProfileSelectApplet>(); - } - - if (frontend.software_keyboard == nullptr) { - frontend.software_keyboard = - std::make_unique<Core::Frontend::DefaultSoftwareKeyboardApplet>(); - } - - if (frontend.web_browser == nullptr) { - frontend.web_browser = std::make_unique<Core::Frontend::DefaultWebBrowserApplet>(); - } -} - -void AppletManager::ClearAll() { - frontend = {}; -} - -std::shared_ptr<Applet> AppletManager::GetApplet(AppletId id, LibraryAppletMode mode) const { - switch (id) { - case AppletId::Auth: - return std::make_shared<Auth>(system, mode, *frontend.parental_controls); - case AppletId::Cabinet: - return std::make_shared<Cabinet>(system, mode, *frontend.cabinet); - case AppletId::Controller: - return std::make_shared<Controller>(system, mode, *frontend.controller); - case AppletId::Error: - return std::make_shared<Error>(system, mode, *frontend.error); - case AppletId::ProfileSelect: - return std::make_shared<ProfileSelect>(system, mode, *frontend.profile_select); - case AppletId::SoftwareKeyboard: - return std::make_shared<SoftwareKeyboard>(system, mode, *frontend.software_keyboard); - case AppletId::MiiEdit: - return std::make_shared<MiiEdit>(system, mode, *frontend.mii_edit); - case AppletId::Web: - case AppletId::Shop: - case AppletId::OfflineWeb: - case AppletId::LoginShare: - case AppletId::WebAuth: - return std::make_shared<WebBrowser>(system, mode, *frontend.web_browser); - case AppletId::PhotoViewer: - return std::make_shared<PhotoViewer>(system, mode, *frontend.photo_viewer); - default: - UNIMPLEMENTED_MSG( - "No backend implementation exists for applet_id={:02X}! Falling back to stub applet.", - static_cast<u8>(id)); - return std::make_shared<StubApplet>(system, id, mode); - } -} - -} // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h deleted file mode 100644 index 0bf2598b7..000000000 --- a/src/core/hle/service/am/applets/applets.h +++ /dev/null @@ -1,289 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include <memory> -#include <queue> - -#include "common/swap.h" -#include "core/hle/service/kernel_helpers.h" - -union Result; - -namespace Core { -class System; -} - -namespace Core::Frontend { -class CabinetApplet; -class ControllerApplet; -class ECommerceApplet; -class ErrorApplet; -class MiiEditApplet; -class ParentalControlsApplet; -class PhotoViewerApplet; -class ProfileSelectApplet; -class SoftwareKeyboardApplet; -class WebBrowserApplet; -} // namespace Core::Frontend - -namespace Kernel { -class KernelCore; -class KEvent; -class KReadableEvent; -} // namespace Kernel - -namespace Service::NFP { -enum class CabinetMode : u8; -} // namespace Service::NFP - -namespace Service::AM { - -class IStorage; - -namespace Applets { - -enum class AppletId : u32 { - None = 0x00, - Application = 0x01, - OverlayDisplay = 0x02, - QLaunch = 0x03, - Starter = 0x04, - Auth = 0x0A, - Cabinet = 0x0B, - Controller = 0x0C, - DataErase = 0x0D, - Error = 0x0E, - NetConnect = 0x0F, - ProfileSelect = 0x10, - SoftwareKeyboard = 0x11, - MiiEdit = 0x12, - Web = 0x13, - Shop = 0x14, - PhotoViewer = 0x15, - Settings = 0x16, - OfflineWeb = 0x17, - LoginShare = 0x18, - WebAuth = 0x19, - MyPage = 0x1A, -}; - -enum class AppletProgramId : u64 { - QLaunch = 0x0100000000001000ull, - Auth = 0x0100000000001001ull, - Cabinet = 0x0100000000001002ull, - Controller = 0x0100000000001003ull, - DataErase = 0x0100000000001004ull, - Error = 0x0100000000001005ull, - NetConnect = 0x0100000000001006ull, - ProfileSelect = 0x0100000000001007ull, - SoftwareKeyboard = 0x0100000000001008ull, - MiiEdit = 0x0100000000001009ull, - Web = 0x010000000000100Aull, - Shop = 0x010000000000100Bull, - OverlayDisplay = 0x010000000000100Cull, - PhotoViewer = 0x010000000000100Dull, - Settings = 0x010000000000100Eull, - OfflineWeb = 0x010000000000100Full, - LoginShare = 0x0100000000001010ull, - WebAuth = 0x0100000000001011ull, - Starter = 0x0100000000001012ull, - MyPage = 0x0100000000001013ull, - MaxProgramId = 0x0100000000001FFFull, -}; - -enum class LibraryAppletMode : u32 { - AllForeground = 0, - Background = 1, - NoUI = 2, - BackgroundIndirectDisplay = 3, - AllForegroundInitiallyHidden = 4, -}; - -enum class CommonArgumentVersion : u32 { - Version0, - Version1, - Version2, - Version3, -}; - -enum class CommonArgumentSize : u32 { - Version3 = 0x20, -}; - -enum class ThemeColor : u32 { - BasicWhite = 0, - BasicBlack = 3, -}; - -struct CommonArguments { - CommonArgumentVersion arguments_version; - CommonArgumentSize size; - u32 library_version; - ThemeColor theme_color; - bool play_startup_sound; - u64_le system_tick; -}; -static_assert(sizeof(CommonArguments) == 0x20, "CommonArguments has incorrect size."); - -class AppletDataBroker final { -public: - explicit AppletDataBroker(Core::System& system_, LibraryAppletMode applet_mode_); - ~AppletDataBroker(); - - struct RawChannelData { - std::vector<std::vector<u8>> normal; - std::vector<std::vector<u8>> interactive; - }; - - // Retrieves but does not pop the data sent to applet. - RawChannelData PeekDataToAppletForDebug() const; - - std::shared_ptr<IStorage> PopNormalDataToGame(); - std::shared_ptr<IStorage> PopNormalDataToApplet(); - - std::shared_ptr<IStorage> PopInteractiveDataToGame(); - std::shared_ptr<IStorage> PopInteractiveDataToApplet(); - - void PushNormalDataFromGame(std::shared_ptr<IStorage>&& storage); - void PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage); - - void PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage); - void PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage); - - void SignalStateChanged(); - - Kernel::KReadableEvent& GetNormalDataEvent(); - Kernel::KReadableEvent& GetInteractiveDataEvent(); - Kernel::KReadableEvent& GetStateChangedEvent(); - -private: - Core::System& system; - LibraryAppletMode applet_mode; - - KernelHelpers::ServiceContext service_context; - - // Queues are named from applet's perspective - - // PopNormalDataToApplet and PushNormalDataFromGame - std::deque<std::shared_ptr<IStorage>> in_channel; - - // PopNormalDataToGame and PushNormalDataFromApplet - std::deque<std::shared_ptr<IStorage>> out_channel; - - // PopInteractiveDataToApplet and PushInteractiveDataFromGame - std::deque<std::shared_ptr<IStorage>> in_interactive_channel; - - // PopInteractiveDataToGame and PushInteractiveDataFromApplet - std::deque<std::shared_ptr<IStorage>> out_interactive_channel; - - Kernel::KEvent* state_changed_event; - - // Signaled on PushNormalDataFromApplet - Kernel::KEvent* pop_out_data_event; - - // Signaled on PushInteractiveDataFromApplet - Kernel::KEvent* pop_interactive_out_data_event; -}; - -class Applet { -public: - explicit Applet(Core::System& system_, LibraryAppletMode applet_mode_); - virtual ~Applet(); - - virtual void Initialize(); - - virtual bool TransactionComplete() const = 0; - virtual Result GetStatus() const = 0; - virtual void ExecuteInteractive() = 0; - virtual void Execute() = 0; - virtual Result RequestExit() = 0; - - AppletDataBroker& GetBroker() { - return broker; - } - - const AppletDataBroker& GetBroker() const { - return broker; - } - - LibraryAppletMode GetLibraryAppletMode() const { - return applet_mode; - } - - bool IsInitialized() const { - return initialized; - } - -protected: - CommonArguments common_args{}; - AppletDataBroker broker; - LibraryAppletMode applet_mode; - bool initialized = false; -}; - -struct AppletFrontendSet { - using CabinetApplet = std::unique_ptr<Core::Frontend::CabinetApplet>; - using ControllerApplet = std::unique_ptr<Core::Frontend::ControllerApplet>; - using ErrorApplet = std::unique_ptr<Core::Frontend::ErrorApplet>; - using MiiEdit = std::unique_ptr<Core::Frontend::MiiEditApplet>; - using ParentalControlsApplet = std::unique_ptr<Core::Frontend::ParentalControlsApplet>; - using PhotoViewer = std::unique_ptr<Core::Frontend::PhotoViewerApplet>; - using ProfileSelect = std::unique_ptr<Core::Frontend::ProfileSelectApplet>; - using SoftwareKeyboard = std::unique_ptr<Core::Frontend::SoftwareKeyboardApplet>; - using WebBrowser = std::unique_ptr<Core::Frontend::WebBrowserApplet>; - - AppletFrontendSet(); - AppletFrontendSet(CabinetApplet cabinet_applet, ControllerApplet controller_applet, - ErrorApplet error_applet, MiiEdit mii_edit_, - ParentalControlsApplet parental_controls_applet, PhotoViewer photo_viewer_, - ProfileSelect profile_select_, SoftwareKeyboard software_keyboard_, - WebBrowser web_browser_); - ~AppletFrontendSet(); - - AppletFrontendSet(const AppletFrontendSet&) = delete; - AppletFrontendSet& operator=(const AppletFrontendSet&) = delete; - - AppletFrontendSet(AppletFrontendSet&&) noexcept; - AppletFrontendSet& operator=(AppletFrontendSet&&) noexcept; - - CabinetApplet cabinet; - ControllerApplet controller; - ErrorApplet error; - MiiEdit mii_edit; - ParentalControlsApplet parental_controls; - PhotoViewer photo_viewer; - ProfileSelect profile_select; - SoftwareKeyboard software_keyboard; - WebBrowser web_browser; -}; - -class AppletManager { -public: - explicit AppletManager(Core::System& system_); - ~AppletManager(); - - const AppletFrontendSet& GetAppletFrontendSet() const; - NFP::CabinetMode GetCabinetMode() const; - AppletId GetCurrentAppletId() const; - - void SetAppletFrontendSet(AppletFrontendSet set); - void SetCabinetMode(NFP::CabinetMode mode); - void SetCurrentAppletId(AppletId applet_id); - void SetDefaultAppletFrontendSet(); - void SetDefaultAppletsIfMissing(); - void ClearAll(); - - std::shared_ptr<Applet> GetApplet(AppletId id, LibraryAppletMode mode) const; - -private: - AppletId current_applet_id{}; - NFP::CabinetMode cabinet_mode{}; - - AppletFrontendSet frontend; - Core::System& system; -}; - -} // namespace Applets -} // namespace Service::AM diff --git a/src/core/hle/service/am/application_creator.cpp b/src/core/hle/service/am/application_creator.cpp new file mode 100644 index 000000000..79ea045a3 --- /dev/null +++ b/src/core/hle/service/am/application_creator.cpp @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/application_creator.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IApplicationCreator::IApplicationCreator(Core::System& system_) + : ServiceFramework{system_, "IApplicationCreator"} { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "CreateApplication"}, + {1, nullptr, "PopLaunchRequestedApplication"}, + {10, nullptr, "CreateSystemApplication"}, + {100, nullptr, "PopFloatingApplicationForDevelopment"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IApplicationCreator::~IApplicationCreator() = default; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/application_creator.h b/src/core/hle/service/am/application_creator.h new file mode 100644 index 000000000..375a3c476 --- /dev/null +++ b/src/core/hle/service/am/application_creator.h @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +class IApplicationCreator final : public ServiceFramework<IApplicationCreator> { +public: + explicit IApplicationCreator(Core::System& system_); + ~IApplicationCreator() override; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/application_functions.cpp b/src/core/hle/service/am/application_functions.cpp new file mode 100644 index 000000000..51c5be2d1 --- /dev/null +++ b/src/core/hle/service/am/application_functions.cpp @@ -0,0 +1,594 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/settings.h" +#include "common/uuid.h" +#include "core/file_sys/control_metadata.h" +#include "core/file_sys/patch_manager.h" +#include "core/file_sys/registered_cache.h" +#include "core/file_sys/savedata_factory.h" +#include "core/hle/service/acc/profile_manager.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/applet.h" +#include "core/hle/service/am/application_functions.h" +#include "core/hle/service/am/storage.h" +#include "core/hle/service/filesystem/filesystem.h" +#include "core/hle/service/filesystem/save_data_controller.h" +#include "core/hle/service/ipc_helpers.h" +#include "core/hle/service/ns/ns.h" +#include "core/hle/service/sm/sm.h" + +namespace Service::AM { + +enum class LaunchParameterKind : u32 { + UserChannel = 1, + AccountPreselectedUser = 2, +}; + +IApplicationFunctions::IApplicationFunctions(Core::System& system_, std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "IApplicationFunctions"}, applet{std::move(applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"}, + {10, nullptr, "CreateApplicationAndPushAndRequestToStart"}, + {11, nullptr, "CreateApplicationAndPushAndRequestToStartForQuest"}, + {12, nullptr, "CreateApplicationAndRequestToStart"}, + {13, &IApplicationFunctions::CreateApplicationAndRequestToStartForQuest, "CreateApplicationAndRequestToStartForQuest"}, + {14, nullptr, "CreateApplicationWithAttributeAndPushAndRequestToStartForQuest"}, + {15, nullptr, "CreateApplicationWithAttributeAndRequestToStartForQuest"}, + {20, &IApplicationFunctions::EnsureSaveData, "EnsureSaveData"}, + {21, &IApplicationFunctions::GetDesiredLanguage, "GetDesiredLanguage"}, + {22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"}, + {23, &IApplicationFunctions::GetDisplayVersion, "GetDisplayVersion"}, + {24, nullptr, "GetLaunchStorageInfoForDebug"}, + {25, &IApplicationFunctions::ExtendSaveData, "ExtendSaveData"}, + {26, &IApplicationFunctions::GetSaveDataSize, "GetSaveDataSize"}, + {27, &IApplicationFunctions::CreateCacheStorage, "CreateCacheStorage"}, + {28, &IApplicationFunctions::GetSaveDataSizeMax, "GetSaveDataSizeMax"}, + {29, nullptr, "GetCacheStorageMax"}, + {30, &IApplicationFunctions::BeginBlockingHomeButtonShortAndLongPressed, "BeginBlockingHomeButtonShortAndLongPressed"}, + {31, &IApplicationFunctions::EndBlockingHomeButtonShortAndLongPressed, "EndBlockingHomeButtonShortAndLongPressed"}, + {32, &IApplicationFunctions::BeginBlockingHomeButton, "BeginBlockingHomeButton"}, + {33, &IApplicationFunctions::EndBlockingHomeButton, "EndBlockingHomeButton"}, + {34, nullptr, "SelectApplicationLicense"}, + {35, nullptr, "GetDeviceSaveDataSizeMax"}, + {36, nullptr, "GetLimitedApplicationLicense"}, + {37, nullptr, "GetLimitedApplicationLicenseUpgradableEvent"}, + {40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"}, + {50, &IApplicationFunctions::GetPseudoDeviceId, "GetPseudoDeviceId"}, + {60, nullptr, "SetMediaPlaybackStateForApplication"}, + {65, &IApplicationFunctions::IsGamePlayRecordingSupported, "IsGamePlayRecordingSupported"}, + {66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"}, + {67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"}, + {68, nullptr, "RequestFlushGamePlayingMovieForDebug"}, + {70, nullptr, "RequestToShutdown"}, + {71, nullptr, "RequestToReboot"}, + {72, nullptr, "RequestToSleep"}, + {80, nullptr, "ExitAndRequestToShowThanksMessage"}, + {90, &IApplicationFunctions::EnableApplicationCrashReport, "EnableApplicationCrashReport"}, + {100, &IApplicationFunctions::InitializeApplicationCopyrightFrameBuffer, "InitializeApplicationCopyrightFrameBuffer"}, + {101, &IApplicationFunctions::SetApplicationCopyrightImage, "SetApplicationCopyrightImage"}, + {102, &IApplicationFunctions::SetApplicationCopyrightVisibility, "SetApplicationCopyrightVisibility"}, + {110, &IApplicationFunctions::QueryApplicationPlayStatistics, "QueryApplicationPlayStatistics"}, + {111, &IApplicationFunctions::QueryApplicationPlayStatisticsByUid, "QueryApplicationPlayStatisticsByUid"}, + {120, &IApplicationFunctions::ExecuteProgram, "ExecuteProgram"}, + {121, &IApplicationFunctions::ClearUserChannel, "ClearUserChannel"}, + {122, &IApplicationFunctions::UnpopToUserChannel, "UnpopToUserChannel"}, + {123, &IApplicationFunctions::GetPreviousProgramIndex, "GetPreviousProgramIndex"}, + {124, nullptr, "EnableApplicationAllThreadDumpOnCrash"}, + {130, &IApplicationFunctions::GetGpuErrorDetectedSystemEvent, "GetGpuErrorDetectedSystemEvent"}, + {131, nullptr, "SetDelayTimeToAbortOnGpuError"}, + {140, &IApplicationFunctions::GetFriendInvitationStorageChannelEvent, "GetFriendInvitationStorageChannelEvent"}, + {141, &IApplicationFunctions::TryPopFromFriendInvitationStorageChannel, "TryPopFromFriendInvitationStorageChannel"}, + {150, &IApplicationFunctions::GetNotificationStorageChannelEvent, "GetNotificationStorageChannelEvent"}, + {151, nullptr, "TryPopFromNotificationStorageChannel"}, + {160, &IApplicationFunctions::GetHealthWarningDisappearedSystemEvent, "GetHealthWarningDisappearedSystemEvent"}, + {170, nullptr, "SetHdcpAuthenticationActivated"}, + {180, nullptr, "GetLaunchRequiredVersion"}, + {181, nullptr, "UpgradeLaunchRequiredVersion"}, + {190, nullptr, "SendServerMaintenanceOverlayNotification"}, + {200, nullptr, "GetLastApplicationExitReason"}, + {500, nullptr, "StartContinuousRecordingFlushForDebug"}, + {1000, nullptr, "CreateMovieMaker"}, + {1001, &IApplicationFunctions::PrepareForJit, "PrepareForJit"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IApplicationFunctions::~IApplicationFunctions() = default; + +void IApplicationFunctions::EnableApplicationCrashReport(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->application_crash_report_enabled = true; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::InitializeApplicationCopyrightFrameBuffer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::SetApplicationCopyrightImage(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::SetApplicationCopyrightVisibility(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto is_visible = rp.Pop<bool>(); + + LOG_WARNING(Service_AM, "(STUBBED) called, is_visible={}", is_visible); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::BeginBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->home_button_long_pressed_blocked = true; + applet->home_button_short_pressed_blocked = true; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::EndBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->home_button_long_pressed_blocked = false; + applet->home_button_short_pressed_blocked = false; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::BeginBlockingHomeButton(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->home_button_long_pressed_blocked = true; + applet->home_button_short_pressed_blocked = true; + applet->home_button_double_click_enabled = true; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::EndBlockingHomeButton(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->home_button_long_pressed_blocked = false; + applet->home_button_short_pressed_blocked = false; + applet->home_button_double_click_enabled = false; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::PopLaunchParameter(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto kind = rp.PopEnum<LaunchParameterKind>(); + + LOG_INFO(Service_AM, "called, kind={:08X}", kind); + + std::scoped_lock lk{applet->lock}; + + auto& channel = kind == LaunchParameterKind::UserChannel + ? applet->user_channel_launch_parameter + : applet->preselected_user_launch_parameter; + + if (channel.empty()) { + LOG_WARNING(Service_AM, "Attempted to pop parameter {} but none was found!", kind); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(AM::ResultNoDataInChannel); + return; + } + + auto data = channel.back(); + channel.pop_back(); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IStorage>(system, std::move(data)); +} + +void IApplicationFunctions::CreateApplicationAndRequestToStartForQuest(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::EnsureSaveData(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + u128 user_id = rp.PopRaw<u128>(); + + LOG_DEBUG(Service_AM, "called, uid={:016X}{:016X}", user_id[1], user_id[0]); + + FileSys::SaveDataAttribute attribute{}; + attribute.title_id = applet->program_id; + attribute.user_id = user_id; + attribute.type = FileSys::SaveDataType::SaveData; + + FileSys::VirtualDir save_data{}; + const auto res = system.GetFileSystemController().OpenSaveDataController()->CreateSaveData( + &save_data, FileSys::SaveDataSpaceId::NandUser, attribute); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(res); + rb.Push<u64>(0); +} + +void IApplicationFunctions::SetTerminateResult(HLERequestContext& ctx) { + // Takes an input u32 Result, no output. + // For example, in some cases official apps use this with error 0x2A2 then + // uses svcBreak. + + IPC::RequestParser rp{ctx}; + u32 result = rp.Pop<u32>(); + LOG_WARNING(Service_AM, "(STUBBED) called, result=0x{:08X}", result); + + std::scoped_lock lk{applet->lock}; + applet->terminate_result = Result(result); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::GetDisplayVersion(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + std::array<u8, 0x10> version_string{}; + + const auto res = [this] { + const FileSys::PatchManager pm{applet->program_id, system.GetFileSystemController(), + system.GetContentProvider()}; + auto metadata = pm.GetControlMetadata(); + if (metadata.first != nullptr) { + return metadata; + } + + const FileSys::PatchManager pm_update{FileSys::GetUpdateTitleID(applet->program_id), + system.GetFileSystemController(), + system.GetContentProvider()}; + return pm_update.GetControlMetadata(); + }(); + + if (res.first != nullptr) { + const auto& version = res.first->GetVersionString(); + std::copy(version.begin(), version.end(), version_string.begin()); + } else { + static constexpr char default_version[]{"1.0.0"}; + std::memcpy(version_string.data(), default_version, sizeof(default_version)); + } + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.PushRaw(version_string); +} + +void IApplicationFunctions::GetDesiredLanguage(HLERequestContext& ctx) { + // TODO(bunnei): This should be configurable + LOG_DEBUG(Service_AM, "called"); + + // Get supported languages from NACP, if possible + // Default to 0 (all languages supported) + u32 supported_languages = 0; + + const auto res = [this] { + const FileSys::PatchManager pm{applet->program_id, system.GetFileSystemController(), + system.GetContentProvider()}; + auto metadata = pm.GetControlMetadata(); + if (metadata.first != nullptr) { + return metadata; + } + + const FileSys::PatchManager pm_update{FileSys::GetUpdateTitleID(applet->program_id), + system.GetFileSystemController(), + system.GetContentProvider()}; + return pm_update.GetControlMetadata(); + }(); + + if (res.first != nullptr) { + supported_languages = res.first->GetSupportedLanguages(); + } + + // Call IApplicationManagerInterface implementation. + auto& service_manager = system.ServiceManager(); + auto ns_am2 = service_manager.GetService<NS::NS>("ns:am2"); + auto app_man = ns_am2->GetApplicationManagerInterface(); + + // Get desired application language + u8 desired_language{}; + const auto res_lang = + app_man->GetApplicationDesiredLanguage(&desired_language, supported_languages); + if (res_lang != ResultSuccess) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res_lang); + return; + } + + // Convert to settings language code. + u64 language_code{}; + const auto res_code = + app_man->ConvertApplicationLanguageToLanguageCode(&language_code, desired_language); + if (res_code != ResultSuccess) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res_code); + return; + } + + LOG_DEBUG(Service_AM, "got desired_language={:016X}", language_code); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push(language_code); +} + +void IApplicationFunctions::IsGamePlayRecordingSupported(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(applet->gameplay_recording_supported); +} + +void IApplicationFunctions::InitializeGamePlayRecording(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::SetGamePlayRecordingState(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::RequestParser rp{ctx}; + + std::scoped_lock lk{applet->lock}; + applet->gameplay_recording_state = rp.PopRaw<GameplayRecordingState>(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::NotifyRunning(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->is_running = true; + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u8>(0); // Unknown, seems to be ignored by official processes +} + +void IApplicationFunctions::GetPseudoDeviceId(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + + // Returns a 128-bit UUID + rb.Push<u64>(0); + rb.Push<u64>(0); +} + +void IApplicationFunctions::ExtendSaveData(HLERequestContext& ctx) { + struct Parameters { + FileSys::SaveDataType type; + u128 user_id; + u64 new_normal_size; + u64 new_journal_size; + }; + static_assert(sizeof(Parameters) == 40); + + IPC::RequestParser rp{ctx}; + const auto [type, user_id, new_normal_size, new_journal_size] = rp.PopRaw<Parameters>(); + + LOG_DEBUG(Service_AM, + "called with type={:02X}, user_id={:016X}{:016X}, new_normal={:016X}, " + "new_journal={:016X}", + static_cast<u8>(type), user_id[1], user_id[0], new_normal_size, new_journal_size); + + system.GetFileSystemController().OpenSaveDataController()->WriteSaveDataSize( + type, applet->program_id, user_id, {new_normal_size, new_journal_size}); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + + // The following value is used upon failure to help the system recover. + // Since we always succeed, this should be 0. + rb.Push<u64>(0); +} + +void IApplicationFunctions::GetSaveDataSize(HLERequestContext& ctx) { + struct Parameters { + FileSys::SaveDataType type; + u128 user_id; + }; + static_assert(sizeof(Parameters) == 24); + + IPC::RequestParser rp{ctx}; + const auto [type, user_id] = rp.PopRaw<Parameters>(); + + LOG_DEBUG(Service_AM, "called with type={:02X}, user_id={:016X}{:016X}", type, user_id[1], + user_id[0]); + + const auto size = system.GetFileSystemController().OpenSaveDataController()->ReadSaveDataSize( + type, applet->program_id, user_id); + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.Push(size.normal); + rb.Push(size.journal); +} + +void IApplicationFunctions::CreateCacheStorage(HLERequestContext& ctx) { + struct InputParameters { + u16 index; + s64 size; + s64 journal_size; + }; + static_assert(sizeof(InputParameters) == 24); + + struct OutputParameters { + u32 storage_target; + u64 required_size; + }; + static_assert(sizeof(OutputParameters) == 16); + + IPC::RequestParser rp{ctx}; + const auto params = rp.PopRaw<InputParameters>(); + + LOG_WARNING(Service_AM, "(STUBBED) called with index={}, size={:#x}, journal_size={:#x}", + params.index, params.size, params.journal_size); + + const OutputParameters resp{ + .storage_target = 1, + .required_size = 0, + }; + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.PushRaw(resp); +} + +void IApplicationFunctions::GetSaveDataSizeMax(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + constexpr u64 size_max_normal = 0xFFFFFFF; + constexpr u64 size_max_journal = 0xFFFFFFF; + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.Push(size_max_normal); + rb.Push(size_max_journal); +} + +void IApplicationFunctions::QueryApplicationPlayStatistics(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u32>(0); +} + +void IApplicationFunctions::QueryApplicationPlayStatisticsByUid(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u32>(0); +} + +void IApplicationFunctions::ExecuteProgram(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::RequestParser rp{ctx}; + [[maybe_unused]] const auto unk_1 = rp.Pop<u32>(); + [[maybe_unused]] const auto unk_2 = rp.Pop<u32>(); + const auto program_index = rp.Pop<u64>(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + + // Swap user channel ownership into the system so that it will be preserved + system.GetUserChannel().swap(applet->user_channel_launch_parameter); + system.ExecuteProgram(program_index); +} + +void IApplicationFunctions::ClearUserChannel(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + applet->user_channel_launch_parameter.clear(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::UnpopToUserChannel(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::RequestParser rp{ctx}; + const auto storage = rp.PopIpcInterface<IStorage>().lock(); + if (storage) { + applet->user_channel_launch_parameter.push_back(storage->GetData()); + } + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IApplicationFunctions::GetPreviousProgramIndex(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<s32>(applet->previous_program_index); +} + +void IApplicationFunctions::GetGpuErrorDetectedSystemEvent(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->gpu_error_detected_event.GetHandle()); +} + +void IApplicationFunctions::GetFriendInvitationStorageChannelEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->friend_invitation_storage_channel_event.GetHandle()); +} + +void IApplicationFunctions::TryPopFromFriendInvitationStorageChannel(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(AM::ResultNoDataInChannel); +} + +void IApplicationFunctions::GetNotificationStorageChannelEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->notification_storage_channel_event.GetHandle()); +} + +void IApplicationFunctions::GetHealthWarningDisappearedSystemEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->health_warning_disappeared_system_event.GetHandle()); +} + +void IApplicationFunctions::PrepareForJit(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->jit_service_launched = true; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/application_functions.h b/src/core/hle/service/am/application_functions.h new file mode 100644 index 000000000..55eb21d39 --- /dev/null +++ b/src/core/hle/service/am/application_functions.h @@ -0,0 +1,58 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class IApplicationFunctions final : public ServiceFramework<IApplicationFunctions> { +public: + explicit IApplicationFunctions(Core::System& system_, std::shared_ptr<Applet> applet_); + ~IApplicationFunctions() override; + +private: + void PopLaunchParameter(HLERequestContext& ctx); + void CreateApplicationAndRequestToStartForQuest(HLERequestContext& ctx); + void EnsureSaveData(HLERequestContext& ctx); + void SetTerminateResult(HLERequestContext& ctx); + void GetDisplayVersion(HLERequestContext& ctx); + void GetDesiredLanguage(HLERequestContext& ctx); + void IsGamePlayRecordingSupported(HLERequestContext& ctx); + void InitializeGamePlayRecording(HLERequestContext& ctx); + void SetGamePlayRecordingState(HLERequestContext& ctx); + void NotifyRunning(HLERequestContext& ctx); + void GetPseudoDeviceId(HLERequestContext& ctx); + void ExtendSaveData(HLERequestContext& ctx); + void GetSaveDataSize(HLERequestContext& ctx); + void CreateCacheStorage(HLERequestContext& ctx); + void GetSaveDataSizeMax(HLERequestContext& ctx); + void BeginBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx); + void EndBlockingHomeButtonShortAndLongPressed(HLERequestContext& ctx); + void BeginBlockingHomeButton(HLERequestContext& ctx); + void EndBlockingHomeButton(HLERequestContext& ctx); + void EnableApplicationCrashReport(HLERequestContext& ctx); + void InitializeApplicationCopyrightFrameBuffer(HLERequestContext& ctx); + void SetApplicationCopyrightImage(HLERequestContext& ctx); + void SetApplicationCopyrightVisibility(HLERequestContext& ctx); + void QueryApplicationPlayStatistics(HLERequestContext& ctx); + void QueryApplicationPlayStatisticsByUid(HLERequestContext& ctx); + void ExecuteProgram(HLERequestContext& ctx); + void ClearUserChannel(HLERequestContext& ctx); + void UnpopToUserChannel(HLERequestContext& ctx); + void GetPreviousProgramIndex(HLERequestContext& ctx); + void GetGpuErrorDetectedSystemEvent(HLERequestContext& ctx); + void GetFriendInvitationStorageChannelEvent(HLERequestContext& ctx); + void TryPopFromFriendInvitationStorageChannel(HLERequestContext& ctx); + void GetNotificationStorageChannelEvent(HLERequestContext& ctx); + void GetHealthWarningDisappearedSystemEvent(HLERequestContext& ctx); + void PrepareForJit(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/application_proxy.cpp b/src/core/hle/service/am/application_proxy.cpp new file mode 100644 index 000000000..a6fd6d37f --- /dev/null +++ b/src/core/hle/service/am/application_proxy.cpp @@ -0,0 +1,115 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/applet_common_functions.h" +#include "core/hle/service/am/application_functions.h" +#include "core/hle/service/am/application_proxy.h" +#include "core/hle/service/am/audio_controller.h" +#include "core/hle/service/am/common_state_getter.h" +#include "core/hle/service/am/debug_functions.h" +#include "core/hle/service/am/display_controller.h" +#include "core/hle/service/am/library_applet_creator.h" +#include "core/hle/service/am/library_applet_self_accessor.h" +#include "core/hle/service/am/process_winding_controller.h" +#include "core/hle/service/am/self_controller.h" +#include "core/hle/service/am/window_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IApplicationProxy::IApplicationProxy(Nvnflinger::Nvnflinger& nvnflinger_, + std::shared_ptr<Applet> applet_, Core::System& system_) + : ServiceFramework{system_, "IApplicationProxy"}, nvnflinger{nvnflinger_}, applet{std::move( + applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &IApplicationProxy::GetCommonStateGetter, "GetCommonStateGetter"}, + {1, &IApplicationProxy::GetSelfController, "GetSelfController"}, + {2, &IApplicationProxy::GetWindowController, "GetWindowController"}, + {3, &IApplicationProxy::GetAudioController, "GetAudioController"}, + {4, &IApplicationProxy::GetDisplayController, "GetDisplayController"}, + {10, &IApplicationProxy::GetProcessWindingController, "GetProcessWindingController"}, + {11, &IApplicationProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, + {20, &IApplicationProxy::GetApplicationFunctions, "GetApplicationFunctions"}, + {1000, &IApplicationProxy::GetDebugFunctions, "GetDebugFunctions"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IApplicationProxy::~IApplicationProxy() = default; + +void IApplicationProxy::GetAudioController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IAudioController>(system); +} + +void IApplicationProxy::GetDisplayController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IDisplayController>(system, applet); +} + +void IApplicationProxy::GetProcessWindingController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IProcessWindingController>(system, applet); +} + +void IApplicationProxy::GetDebugFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IDebugFunctions>(system); +} + +void IApplicationProxy::GetWindowController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IWindowController>(system, applet); +} + +void IApplicationProxy::GetSelfController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ISelfController>(system, applet, nvnflinger); +} + +void IApplicationProxy::GetCommonStateGetter(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ICommonStateGetter>(system, applet); +} + +void IApplicationProxy::GetLibraryAppletCreator(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ILibraryAppletCreator>(system, applet); +} + +void IApplicationProxy::GetApplicationFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IApplicationFunctions>(system, applet); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/application_proxy.h b/src/core/hle/service/am/application_proxy.h new file mode 100644 index 000000000..eb98b095c --- /dev/null +++ b/src/core/hle/service/am/application_proxy.h @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class IApplicationProxy final : public ServiceFramework<IApplicationProxy> { +public: + explicit IApplicationProxy(Nvnflinger::Nvnflinger& nvnflinger_, + std::shared_ptr<Applet> msg_queue_, Core::System& system_); + ~IApplicationProxy(); + +private: + void GetAudioController(HLERequestContext& ctx); + void GetDisplayController(HLERequestContext& ctx); + void GetProcessWindingController(HLERequestContext& ctx); + void GetDebugFunctions(HLERequestContext& ctx); + void GetWindowController(HLERequestContext& ctx); + void GetSelfController(HLERequestContext& ctx); + void GetCommonStateGetter(HLERequestContext& ctx); + void GetLibraryAppletCreator(HLERequestContext& ctx); + void GetApplicationFunctions(HLERequestContext& ctx); + + Nvnflinger::Nvnflinger& nvnflinger; + std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/audio_controller.cpp b/src/core/hle/service/am/audio_controller.cpp new file mode 100644 index 000000000..ae75db174 --- /dev/null +++ b/src/core/hle/service/am/audio_controller.cpp @@ -0,0 +1,91 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/audio_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IAudioController::IAudioController(Core::System& system_) + : ServiceFramework{system_, "IAudioController"} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &IAudioController::SetExpectedMasterVolume, "SetExpectedMasterVolume"}, + {1, &IAudioController::GetMainAppletExpectedMasterVolume, "GetMainAppletExpectedMasterVolume"}, + {2, &IAudioController::GetLibraryAppletExpectedMasterVolume, "GetLibraryAppletExpectedMasterVolume"}, + {3, &IAudioController::ChangeMainAppletMasterVolume, "ChangeMainAppletMasterVolume"}, + {4, &IAudioController::SetTransparentAudioRate, "SetTransparentVolumeRate"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IAudioController::~IAudioController() = default; + +void IAudioController::SetExpectedMasterVolume(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const float main_applet_volume_tmp = rp.Pop<float>(); + const float library_applet_volume_tmp = rp.Pop<float>(); + + LOG_DEBUG(Service_AM, "called. main_applet_volume={}, library_applet_volume={}", + main_applet_volume_tmp, library_applet_volume_tmp); + + // Ensure the volume values remain within the 0-100% range + main_applet_volume = std::clamp(main_applet_volume_tmp, min_allowed_volume, max_allowed_volume); + library_applet_volume = + std::clamp(library_applet_volume_tmp, min_allowed_volume, max_allowed_volume); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IAudioController::GetMainAppletExpectedMasterVolume(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called. main_applet_volume={}", main_applet_volume); + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(main_applet_volume); +} + +void IAudioController::GetLibraryAppletExpectedMasterVolume(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called. library_applet_volume={}", library_applet_volume); + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(library_applet_volume); +} + +void IAudioController::ChangeMainAppletMasterVolume(HLERequestContext& ctx) { + struct Parameters { + float volume; + s64 fade_time_ns; + }; + static_assert(sizeof(Parameters) == 16); + + IPC::RequestParser rp{ctx}; + const auto parameters = rp.PopRaw<Parameters>(); + + LOG_DEBUG(Service_AM, "called. volume={}, fade_time_ns={}", parameters.volume, + parameters.fade_time_ns); + + main_applet_volume = std::clamp(parameters.volume, min_allowed_volume, max_allowed_volume); + fade_time_ns = std::chrono::nanoseconds{parameters.fade_time_ns}; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IAudioController::SetTransparentAudioRate(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const float transparent_volume_rate_tmp = rp.Pop<float>(); + + LOG_DEBUG(Service_AM, "called. transparent_volume_rate={}", transparent_volume_rate_tmp); + + // Clamp volume range to 0-100%. + transparent_volume_rate = + std::clamp(transparent_volume_rate_tmp, min_allowed_volume, max_allowed_volume); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/audio_controller.h b/src/core/hle/service/am/audio_controller.h new file mode 100644 index 000000000..a47e3bad8 --- /dev/null +++ b/src/core/hle/service/am/audio_controller.h @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +class IAudioController final : public ServiceFramework<IAudioController> { +public: + explicit IAudioController(Core::System& system_); + ~IAudioController() override; + +private: + void SetExpectedMasterVolume(HLERequestContext& ctx); + void GetMainAppletExpectedMasterVolume(HLERequestContext& ctx); + void GetLibraryAppletExpectedMasterVolume(HLERequestContext& ctx); + void ChangeMainAppletMasterVolume(HLERequestContext& ctx); + void SetTransparentAudioRate(HLERequestContext& ctx); + + static constexpr float min_allowed_volume = 0.0f; + static constexpr float max_allowed_volume = 1.0f; + + float main_applet_volume{0.25f}; + float library_applet_volume{max_allowed_volume}; + float transparent_volume_rate{min_allowed_volume}; + + // Volume transition fade time in nanoseconds. + // e.g. If the main applet volume was 0% and was changed to 50% + // with a fade of 50ns, then over the course of 50ns, + // the volume will gradually fade up to 50% + std::chrono::nanoseconds fade_time_ns{0}; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/common_state_getter.cpp b/src/core/hle/service/am/common_state_getter.cpp new file mode 100644 index 000000000..937ac0beb --- /dev/null +++ b/src/core/hle/service/am/common_state_getter.cpp @@ -0,0 +1,314 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/settings.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/applet.h" +#include "core/hle/service/am/common_state_getter.h" +#include "core/hle/service/am/lock_accessor.h" +#include "core/hle/service/apm/apm_controller.h" +#include "core/hle/service/apm/apm_interface.h" +#include "core/hle/service/ipc_helpers.h" +#include "core/hle/service/pm/pm.h" +#include "core/hle/service/sm/sm.h" +#include "core/hle/service/vi/vi.h" + +namespace Service::AM { + +ICommonStateGetter::ICommonStateGetter(Core::System& system_, std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "ICommonStateGetter"}, applet{std::move(applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &ICommonStateGetter::GetEventHandle, "GetEventHandle"}, + {1, &ICommonStateGetter::ReceiveMessage, "ReceiveMessage"}, + {2, nullptr, "GetThisAppletKind"}, + {3, nullptr, "AllowToEnterSleep"}, + {4, nullptr, "DisallowToEnterSleep"}, + {5, &ICommonStateGetter::GetOperationMode, "GetOperationMode"}, + {6, &ICommonStateGetter::GetPerformanceMode, "GetPerformanceMode"}, + {7, nullptr, "GetCradleStatus"}, + {8, &ICommonStateGetter::GetBootMode, "GetBootMode"}, + {9, &ICommonStateGetter::GetCurrentFocusState, "GetCurrentFocusState"}, + {10, &ICommonStateGetter::RequestToAcquireSleepLock, "RequestToAcquireSleepLock"}, + {11, nullptr, "ReleaseSleepLock"}, + {12, nullptr, "ReleaseSleepLockTransiently"}, + {13, &ICommonStateGetter::GetAcquiredSleepLockEvent, "GetAcquiredSleepLockEvent"}, + {14, nullptr, "GetWakeupCount"}, + {20, nullptr, "PushToGeneralChannel"}, + {30, nullptr, "GetHomeButtonReaderLockAccessor"}, + {31, &ICommonStateGetter::GetReaderLockAccessorEx, "GetReaderLockAccessorEx"}, + {32, nullptr, "GetWriterLockAccessorEx"}, + {40, nullptr, "GetCradleFwVersion"}, + {50, &ICommonStateGetter::IsVrModeEnabled, "IsVrModeEnabled"}, + {51, &ICommonStateGetter::SetVrModeEnabled, "SetVrModeEnabled"}, + {52, &ICommonStateGetter::SetLcdBacklighOffEnabled, "SetLcdBacklighOffEnabled"}, + {53, &ICommonStateGetter::BeginVrModeEx, "BeginVrModeEx"}, + {54, &ICommonStateGetter::EndVrModeEx, "EndVrModeEx"}, + {55, nullptr, "IsInControllerFirmwareUpdateSection"}, + {59, nullptr, "SetVrPositionForDebug"}, + {60, &ICommonStateGetter::GetDefaultDisplayResolution, "GetDefaultDisplayResolution"}, + {61, &ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent, "GetDefaultDisplayResolutionChangeEvent"}, + {62, nullptr, "GetHdcpAuthenticationState"}, + {63, nullptr, "GetHdcpAuthenticationStateChangeEvent"}, + {64, nullptr, "SetTvPowerStateMatchingMode"}, + {65, nullptr, "GetApplicationIdByContentActionName"}, + {66, &ICommonStateGetter::SetCpuBoostMode, "SetCpuBoostMode"}, + {67, nullptr, "CancelCpuBoostMode"}, + {68, &ICommonStateGetter::GetBuiltInDisplayType, "GetBuiltInDisplayType"}, + {80, &ICommonStateGetter::PerformSystemButtonPressingIfInFocus, "PerformSystemButtonPressingIfInFocus"}, + {90, nullptr, "SetPerformanceConfigurationChangedNotification"}, + {91, nullptr, "GetCurrentPerformanceConfiguration"}, + {100, nullptr, "SetHandlingHomeButtonShortPressedEnabled"}, + {110, nullptr, "OpenMyGpuErrorHandler"}, + {120, &ICommonStateGetter::GetAppletLaunchedHistory, "GetAppletLaunchedHistory"}, + {200, nullptr, "GetOperationModeSystemInfo"}, + {300, &ICommonStateGetter::GetSettingsPlatformRegion, "GetSettingsPlatformRegion"}, + {400, nullptr, "ActivateMigrationService"}, + {401, nullptr, "DeactivateMigrationService"}, + {500, nullptr, "DisableSleepTillShutdown"}, + {501, nullptr, "SuppressDisablingSleepTemporarily"}, + {502, nullptr, "IsSleepEnabled"}, + {503, nullptr, "IsDisablingSleepSuppressed"}, + {900, &ICommonStateGetter::SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled, "SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +ICommonStateGetter::~ICommonStateGetter() = default; + +void ICommonStateGetter::GetBootMode(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u8>(static_cast<u8>(Service::PM::SystemBootMode::Normal)); // Normal boot mode +} + +void ICommonStateGetter::GetEventHandle(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->message_queue.GetMessageReceiveEvent()); +} + +void ICommonStateGetter::ReceiveMessage(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + const auto message = applet->message_queue.PopMessage(); + IPC::ResponseBuilder rb{ctx, 3}; + + if (message == AppletMessageQueue::AppletMessage::None) { + LOG_ERROR(Service_AM, "Message queue is empty"); + rb.Push(AM::ResultNoMessages); + rb.PushEnum<AppletMessageQueue::AppletMessage>(message); + return; + } + + rb.Push(ResultSuccess); + rb.PushEnum<AppletMessageQueue::AppletMessage>(message); +} + +void ICommonStateGetter::GetCurrentFocusState(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(static_cast<u8>(applet->focus_state)); +} + +void ICommonStateGetter::GetOperationMode(HLERequestContext& ctx) { + const bool use_docked_mode{Settings::IsDockedMode()}; + LOG_DEBUG(Service_AM, "called, use_docked_mode={}", use_docked_mode); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(static_cast<u8>(use_docked_mode ? OperationMode::Docked : OperationMode::Handheld)); +} + +void ICommonStateGetter::GetPerformanceMode(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.PushEnum(system.GetAPMController().GetCurrentPerformanceMode()); +} + +void ICommonStateGetter::RequestToAcquireSleepLock(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + // Sleep lock is acquired immediately. + applet->sleep_lock_event.Signal(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ICommonStateGetter::GetReaderLockAccessorEx(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto unknown = rp.Pop<u32>(); + + LOG_INFO(Service_AM, "called, unknown={}", unknown); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + + rb.Push(ResultSuccess); + rb.PushIpcInterface<ILockAccessor>(system); +} + +void ICommonStateGetter::GetAcquiredSleepLockEvent(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->sleep_lock_event.GetHandle()); +} + +void ICommonStateGetter::IsVrModeEnabled(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + std::scoped_lock lk{applet->lock}; + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(applet->vr_mode_enabled); +} + +void ICommonStateGetter::SetVrModeEnabled(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + std::scoped_lock lk{applet->lock}; + applet->vr_mode_enabled = rp.Pop<bool>(); + LOG_WARNING(Service_AM, "VR Mode is {}", applet->vr_mode_enabled ? "on" : "off"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ICommonStateGetter::SetLcdBacklighOffEnabled(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto is_lcd_backlight_off_enabled = rp.Pop<bool>(); + + LOG_WARNING(Service_AM, "(STUBBED) called. is_lcd_backlight_off_enabled={}", + is_lcd_backlight_off_enabled); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ICommonStateGetter::BeginVrModeEx(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->vr_mode_enabled = true; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ICommonStateGetter::EndVrModeEx(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->vr_mode_enabled = false; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->message_queue.GetOperationModeChangedEvent()); +} + +void ICommonStateGetter::GetDefaultDisplayResolution(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + + if (Settings::IsDockedMode()) { + rb.Push(static_cast<u32>(Service::VI::DisplayResolution::DockedWidth)); + rb.Push(static_cast<u32>(Service::VI::DisplayResolution::DockedHeight)); + } else { + rb.Push(static_cast<u32>(Service::VI::DisplayResolution::UndockedWidth)); + rb.Push(static_cast<u32>(Service::VI::DisplayResolution::UndockedHeight)); + } +} + +void ICommonStateGetter::SetCpuBoostMode(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called, forwarding to APM:SYS"); + + const auto& sm = system.ServiceManager(); + const auto apm_sys = sm.GetService<APM::APM_Sys>("apm:sys"); + ASSERT(apm_sys != nullptr); + + apm_sys->SetCpuBoostMode(ctx); +} + +void ICommonStateGetter::GetBuiltInDisplayType(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(0); +} + +void ICommonStateGetter::PerformSystemButtonPressingIfInFocus(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto system_button{rp.PopEnum<SystemButtonType>()}; + + LOG_WARNING(Service_AM, "(STUBBED) called, system_button={}", system_button); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ICommonStateGetter::GetAppletLaunchedHistory(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::shared_ptr<Applet> current_applet = applet; + std::vector<AppletId> result; + + const size_t count = ctx.GetWriteBufferNumElements<AppletId>(); + size_t i; + + for (i = 0; i < count && current_applet != nullptr; i++) { + result.push_back(current_applet->applet_id); + current_applet = current_applet->caller_applet.lock(); + } + + ctx.WriteBuffer(result); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(static_cast<u32>(i)); +} + +void ICommonStateGetter::GetSettingsPlatformRegion(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.PushEnum(SysPlatformRegion::Global); +} + +void ICommonStateGetter::SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled( + HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->request_exit_to_library_applet_at_execute_next_program_enabled = true; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/common_state_getter.h b/src/core/hle/service/am/common_state_getter.h new file mode 100644 index 000000000..bf652790c --- /dev/null +++ b/src/core/hle/service/am/common_state_getter.h @@ -0,0 +1,77 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +#include "core/hle/service/am/applet_message_queue.h" + +namespace Service::AM { + +struct Applet; + +class ICommonStateGetter final : public ServiceFramework<ICommonStateGetter> { +public: + explicit ICommonStateGetter(Core::System& system_, std::shared_ptr<Applet> applet_); + ~ICommonStateGetter() override; + +private: + // This is nn::oe::FocusState + enum class FocusState : u8 { + InFocus = 1, + NotInFocus = 2, + Background = 3, + }; + + // This is nn::oe::OperationMode + enum class OperationMode : u8 { + Handheld = 0, + Docked = 1, + }; + + // This is nn::am::service::SystemButtonType + enum class SystemButtonType { + None, + HomeButtonShortPressing, + HomeButtonLongPressing, + PowerButtonShortPressing, + PowerButtonLongPressing, + ShutdownSystem, + CaptureButtonShortPressing, + CaptureButtonLongPressing, + }; + + enum class SysPlatformRegion : s32 { + Global = 1, + Terra = 2, + }; + + void GetEventHandle(HLERequestContext& ctx); + void ReceiveMessage(HLERequestContext& ctx); + void GetCurrentFocusState(HLERequestContext& ctx); + void RequestToAcquireSleepLock(HLERequestContext& ctx); + void GetAcquiredSleepLockEvent(HLERequestContext& ctx); + void GetReaderLockAccessorEx(HLERequestContext& ctx); + void GetDefaultDisplayResolutionChangeEvent(HLERequestContext& ctx); + void GetOperationMode(HLERequestContext& ctx); + void GetPerformanceMode(HLERequestContext& ctx); + void GetBootMode(HLERequestContext& ctx); + void IsVrModeEnabled(HLERequestContext& ctx); + void SetVrModeEnabled(HLERequestContext& ctx); + void SetLcdBacklighOffEnabled(HLERequestContext& ctx); + void BeginVrModeEx(HLERequestContext& ctx); + void EndVrModeEx(HLERequestContext& ctx); + void GetDefaultDisplayResolution(HLERequestContext& ctx); + void SetCpuBoostMode(HLERequestContext& ctx); + void GetBuiltInDisplayType(HLERequestContext& ctx); + void PerformSystemButtonPressingIfInFocus(HLERequestContext& ctx); + void GetAppletLaunchedHistory(HLERequestContext& ctx); + void GetSettingsPlatformRegion(HLERequestContext& ctx); + void SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/debug_functions.cpp b/src/core/hle/service/am/debug_functions.cpp new file mode 100644 index 000000000..f80b970f2 --- /dev/null +++ b/src/core/hle/service/am/debug_functions.cpp @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/debug_functions.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IDebugFunctions::IDebugFunctions(Core::System& system_) + : ServiceFramework{system_, "IDebugFunctions"} { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "NotifyMessageToHomeMenuForDebug"}, + {1, nullptr, "OpenMainApplication"}, + {10, nullptr, "PerformSystemButtonPressing"}, + {20, nullptr, "InvalidateTransitionLayer"}, + {30, nullptr, "RequestLaunchApplicationWithUserAndArgumentForDebug"}, + {31, nullptr, "RequestLaunchApplicationByApplicationLaunchInfoForDebug"}, + {40, nullptr, "GetAppletResourceUsageInfo"}, + {50, nullptr, "AddSystemProgramIdAndAppletIdForDebug"}, + {51, nullptr, "AddOperationConfirmedLibraryAppletIdForDebug"}, + {100, nullptr, "SetCpuBoostModeForApplet"}, + {101, nullptr, "CancelCpuBoostModeForApplet"}, + {110, nullptr, "PushToAppletBoundChannelForDebug"}, + {111, nullptr, "TryPopFromAppletBoundChannelForDebug"}, + {120, nullptr, "AlarmSettingNotificationEnableAppEventReserve"}, + {121, nullptr, "AlarmSettingNotificationDisableAppEventReserve"}, + {122, nullptr, "AlarmSettingNotificationPushAppEventNotify"}, + {130, nullptr, "FriendInvitationSetApplicationParameter"}, + {131, nullptr, "FriendInvitationClearApplicationParameter"}, + {132, nullptr, "FriendInvitationPushApplicationParameter"}, + {140, nullptr, "RestrictPowerOperationForSecureLaunchModeForDebug"}, + {200, nullptr, "CreateFloatingLibraryAppletAccepterForDebug"}, + {300, nullptr, "TerminateAllRunningApplicationsForDebug"}, + {900, nullptr, "GetGrcProcessLaunchedSystemEvent"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IDebugFunctions::~IDebugFunctions() = default; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/debug_functions.h b/src/core/hle/service/am/debug_functions.h new file mode 100644 index 000000000..d55968743 --- /dev/null +++ b/src/core/hle/service/am/debug_functions.h @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +class IDebugFunctions final : public ServiceFramework<IDebugFunctions> { +public: + explicit IDebugFunctions(Core::System& system_); + ~IDebugFunctions() override; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/display_controller.cpp b/src/core/hle/service/am/display_controller.cpp new file mode 100644 index 000000000..4d6858348 --- /dev/null +++ b/src/core/hle/service/am/display_controller.cpp @@ -0,0 +1,135 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/applet.h" +#include "core/hle/service/am/display_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +namespace { +struct OutputParameters { + bool was_written; + s32 fbshare_layer_index; +}; + +static_assert(sizeof(OutputParameters) == 8, "OutputParameters has wrong size"); +} // namespace + +IDisplayController::IDisplayController(Core::System& system_, std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "IDisplayController"}, applet(std::move(applet_)) { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "GetLastForegroundCaptureImage"}, + {1, nullptr, "UpdateLastForegroundCaptureImage"}, + {2, nullptr, "GetLastApplicationCaptureImage"}, + {3, nullptr, "GetCallerAppletCaptureImage"}, + {4, nullptr, "UpdateCallerAppletCaptureImage"}, + {5, nullptr, "GetLastForegroundCaptureImageEx"}, + {6, nullptr, "GetLastApplicationCaptureImageEx"}, + {7, &IDisplayController::GetCallerAppletCaptureImageEx, "GetCallerAppletCaptureImageEx"}, + {8, &IDisplayController::TakeScreenShotOfOwnLayer, "TakeScreenShotOfOwnLayer"}, + {9, nullptr, "CopyBetweenCaptureBuffers"}, + {10, nullptr, "AcquireLastApplicationCaptureBuffer"}, + {11, nullptr, "ReleaseLastApplicationCaptureBuffer"}, + {12, nullptr, "AcquireLastForegroundCaptureBuffer"}, + {13, nullptr, "ReleaseLastForegroundCaptureBuffer"}, + {14, nullptr, "AcquireCallerAppletCaptureBuffer"}, + {15, nullptr, "ReleaseCallerAppletCaptureBuffer"}, + {16, nullptr, "AcquireLastApplicationCaptureBufferEx"}, + {17, nullptr, "AcquireLastForegroundCaptureBufferEx"}, + {18, nullptr, "AcquireCallerAppletCaptureBufferEx"}, + {20, nullptr, "ClearCaptureBuffer"}, + {21, nullptr, "ClearAppletTransitionBuffer"}, + {22, &IDisplayController::AcquireLastApplicationCaptureSharedBuffer, "AcquireLastApplicationCaptureSharedBuffer"}, + {23, &IDisplayController::ReleaseLastApplicationCaptureSharedBuffer, "ReleaseLastApplicationCaptureSharedBuffer"}, + {24, &IDisplayController::AcquireLastForegroundCaptureSharedBuffer, "AcquireLastForegroundCaptureSharedBuffer"}, + {25, &IDisplayController::ReleaseLastForegroundCaptureSharedBuffer, "ReleaseLastForegroundCaptureSharedBuffer"}, + {26, &IDisplayController::AcquireCallerAppletCaptureSharedBuffer, "AcquireCallerAppletCaptureSharedBuffer"}, + {27, &IDisplayController::ReleaseCallerAppletCaptureSharedBuffer, "ReleaseCallerAppletCaptureSharedBuffer"}, + {28, nullptr, "TakeScreenShotOfOwnLayerEx"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IDisplayController::~IDisplayController() = default; + +void IDisplayController::GetCallerAppletCaptureImageEx(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + OutputParameters params{}; + const auto res = applet->system_buffer_manager.WriteAppletCaptureBuffer( + ¶ms.was_written, ¶ms.fbshare_layer_index); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(res); + rb.PushRaw(params); +} + +void IDisplayController::TakeScreenShotOfOwnLayer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IDisplayController::AcquireLastApplicationCaptureSharedBuffer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + OutputParameters params{}; + const auto res = applet->system_buffer_manager.WriteAppletCaptureBuffer( + ¶ms.was_written, ¶ms.fbshare_layer_index); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(res); + rb.PushRaw(params); +} + +void IDisplayController::ReleaseLastApplicationCaptureSharedBuffer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IDisplayController::AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + OutputParameters params{}; + const auto res = applet->system_buffer_manager.WriteAppletCaptureBuffer( + ¶ms.was_written, ¶ms.fbshare_layer_index); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(res); + rb.PushRaw(params); +} + +void IDisplayController::ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IDisplayController::AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + OutputParameters params{}; + const auto res = applet->system_buffer_manager.WriteAppletCaptureBuffer( + ¶ms.was_written, ¶ms.fbshare_layer_index); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(res); + rb.PushRaw(params); +} + +void IDisplayController::ReleaseCallerAppletCaptureSharedBuffer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/display_controller.h b/src/core/hle/service/am/display_controller.h new file mode 100644 index 000000000..75172580c --- /dev/null +++ b/src/core/hle/service/am/display_controller.h @@ -0,0 +1,30 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class IDisplayController final : public ServiceFramework<IDisplayController> { +public: + explicit IDisplayController(Core::System& system_, std::shared_ptr<Applet> applet_); + ~IDisplayController() override; + +private: + void GetCallerAppletCaptureImageEx(HLERequestContext& ctx); + void TakeScreenShotOfOwnLayer(HLERequestContext& ctx); + void AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx); + void ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx); + void AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx); + void ReleaseCallerAppletCaptureSharedBuffer(HLERequestContext& ctx); + void AcquireLastApplicationCaptureSharedBuffer(HLERequestContext& ctx); + void ReleaseLastApplicationCaptureSharedBuffer(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/applets/applet_cabinet.cpp b/src/core/hle/service/am/frontend/applet_cabinet.cpp index c2ff444a6..0862c81b6 100644 --- a/src/core/hle/service/am/applets/applet_cabinet.cpp +++ b/src/core/hle/service/am/frontend/applet_cabinet.cpp @@ -8,16 +8,17 @@ #include "core/hle/kernel/k_event.h" #include "core/hle/kernel/k_readable_event.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_cabinet.h" +#include "core/hle/service/am/frontend/applet_cabinet.h" +#include "core/hle/service/am/storage.h" #include "core/hle/service/mii/mii_manager.h" #include "core/hle/service/nfc/common/device.h" #include "hid_core/hid_core.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { -Cabinet::Cabinet(Core::System& system_, LibraryAppletMode applet_mode_, - const Core::Frontend::CabinetApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_}, service_context{ +Cabinet::Cabinet(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::CabinetApplet& frontend_) + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_}, service_context{ system_, "CabinetApplet"} { @@ -30,7 +31,7 @@ Cabinet::~Cabinet() { }; void Cabinet::Initialize() { - Applet::Initialize(); + FrontendApplet::Initialize(); LOG_INFO(Service_HID, "Initializing Cabinet Applet."); @@ -41,7 +42,7 @@ void Cabinet::Initialize() { common_args.play_startup_sound, common_args.size, common_args.system_tick, common_args.theme_color); - const auto storage = broker.PopNormalDataToApplet(); + std::shared_ptr<IStorage> storage = PopInData(); ASSERT(storage != nullptr); const auto applet_input_data = storage->GetData(); @@ -51,10 +52,6 @@ void Cabinet::Initialize() { sizeof(StartParamForAmiiboSettings)); } -bool Cabinet::TransactionComplete() const { - return is_complete; -} - Result Cabinet::GetStatus() const { return ResultSuccess; } @@ -160,8 +157,8 @@ void Cabinet::DisplayCompleted(bool apply_changes, std::string_view amiibo_name) is_complete = true; - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::move(out_data))); + Exit(); } void Cabinet::Cancel() { @@ -175,8 +172,8 @@ void Cabinet::Cancel() { is_complete = true; - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::move(out_data))); + Exit(); } Result Cabinet::RequestExit() { @@ -184,4 +181,4 @@ Result Cabinet::RequestExit() { R_SUCCEED(); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_cabinet.h b/src/core/hle/service/am/frontend/applet_cabinet.h index f498796f7..3a211ed37 100644 --- a/src/core/hle/service/am/applets/applet_cabinet.h +++ b/src/core/hle/service/am/frontend/applet_cabinet.h @@ -6,7 +6,7 @@ #include <array> #include "core/hle/result.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applets.h" #include "core/hle/service/kernel_helpers.h" #include "core/hle/service/nfp/nfp_types.h" @@ -23,7 +23,7 @@ namespace Service::NFC { class NfcDevice; } -namespace Service::AM::Applets { +namespace Service::AM::Frontend { enum class CabinetAppletVersion : u32 { Version1 = 0x1, @@ -84,15 +84,15 @@ static_assert(sizeof(ReturnValueForAmiiboSettings) == 0x188, "ReturnValueForAmiiboSettings is an invalid size"); #pragma pack(pop) -class Cabinet final : public Applet { +class Cabinet final : public FrontendApplet { public: - explicit Cabinet(Core::System& system_, LibraryAppletMode applet_mode_, + explicit Cabinet(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::CabinetApplet& frontend_); ~Cabinet() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -102,7 +102,6 @@ public: private: const Core::Frontend::CabinetApplet& frontend; - Core::System& system; bool is_complete{false}; std::shared_ptr<Service::NFC::NfcDevice> nfp_device; @@ -111,4 +110,4 @@ private: StartParamForAmiiboSettings applet_input_common{}; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_controller.cpp b/src/core/hle/service/am/frontend/applet_controller.cpp index 0e4d9cc39..bd3e49fc4 100644 --- a/src/core/hle/service/am/applets/applet_controller.cpp +++ b/src/core/hle/service/am/frontend/applet_controller.cpp @@ -11,13 +11,14 @@ #include "core/frontend/applets/controller.h" #include "core/hle/result.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_controller.h" +#include "core/hle/service/am/frontend/applet_controller.h" +#include "core/hle/service/am/storage.h" #include "hid_core/frontend/emulated_controller.h" #include "hid_core/hid_core.h" #include "hid_core/hid_types.h" #include "hid_core/resources/npad/npad.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { [[maybe_unused]] constexpr Result ResultControllerSupportCanceled{ErrorModule::HID, 3101}; [[maybe_unused]] constexpr Result ResultControllerSupportNotSupportedNpadStyle{ErrorModule::HID, @@ -46,14 +47,15 @@ static Core::Frontend::ControllerParameters ConvertToFrontendParameters( }; } -Controller::Controller(Core::System& system_, LibraryAppletMode applet_mode_, +Controller::Controller(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::ControllerApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} Controller::~Controller() = default; void Controller::Initialize() { - Applet::Initialize(); + FrontendApplet::Initialize(); LOG_INFO(Service_HID, "Initializing Controller Applet."); @@ -66,7 +68,7 @@ void Controller::Initialize() { controller_applet_version = ControllerAppletVersion{common_args.library_version}; - const auto private_arg_storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> private_arg_storage = PopInData(); ASSERT(private_arg_storage != nullptr); const auto& private_arg = private_arg_storage->GetData(); @@ -116,7 +118,7 @@ void Controller::Initialize() { switch (controller_private_arg.mode) { case ControllerSupportMode::ShowControllerSupport: case ControllerSupportMode::ShowControllerStrapGuide: { - const auto user_arg_storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> user_arg_storage = PopInData(); ASSERT(user_arg_storage != nullptr); const auto& user_arg = user_arg_storage->GetData(); @@ -142,7 +144,7 @@ void Controller::Initialize() { break; } case ControllerSupportMode::ShowControllerFirmwareUpdate: { - const auto update_arg_storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> update_arg_storage = PopInData(); ASSERT(update_arg_storage != nullptr); const auto& update_arg = update_arg_storage->GetData(); @@ -152,7 +154,7 @@ void Controller::Initialize() { break; } case ControllerSupportMode::ShowControllerKeyRemappingForSystem: { - const auto remapping_arg_storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> remapping_arg_storage = PopInData(); ASSERT(remapping_arg_storage != nullptr); const auto& remapping_arg = remapping_arg_storage->GetData(); @@ -168,10 +170,6 @@ void Controller::Initialize() { } } -bool Controller::TransactionComplete() const { - return complete; -} - Result Controller::GetStatus() const { return status; } @@ -260,8 +258,9 @@ void Controller::ConfigurationComplete(bool is_success) { complete = true; out_data = std::vector<u8>(sizeof(ControllerSupportResultInfo)); std::memcpy(out_data.data(), &result_info, out_data.size()); - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); - broker.SignalStateChanged(); + + PushOutData(std::make_shared<IStorage>(system, std::move(out_data))); + Exit(); } Result Controller::RequestExit() { @@ -269,4 +268,4 @@ Result Controller::RequestExit() { R_SUCCEED(); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_controller.h b/src/core/hle/service/am/frontend/applet_controller.h index 9f839f3d7..2f219429c 100644 --- a/src/core/hle/service/am/applets/applet_controller.h +++ b/src/core/hle/service/am/frontend/applet_controller.h @@ -9,7 +9,7 @@ #include "common/common_funcs.h" #include "common/common_types.h" #include "core/hle/result.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applets.h" namespace Core { class System; @@ -19,7 +19,7 @@ namespace Core::HID { enum class NpadStyleSet : u32; } -namespace Service::AM::Applets { +namespace Service::AM::Frontend { using IdentificationColor = std::array<u8, 4>; using ExplainText = std::array<char, 0x81>; @@ -122,15 +122,15 @@ struct ControllerSupportResultInfo { static_assert(sizeof(ControllerSupportResultInfo) == 0xC, "ControllerSupportResultInfo has incorrect size."); -class Controller final : public Applet { +class Controller final : public FrontendApplet { public: - explicit Controller(Core::System& system_, LibraryAppletMode applet_mode_, + explicit Controller(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::ControllerApplet& frontend_); ~Controller() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -140,7 +140,6 @@ public: private: const Core::Frontend::ControllerApplet& frontend; - Core::System& system; ControllerAppletVersion controller_applet_version; ControllerSupportArgPrivate controller_private_arg; @@ -154,4 +153,4 @@ private: std::vector<u8> out_data; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_error.cpp b/src/core/hle/service/am/frontend/applet_error.cpp index 084bc138c..b97a5f3ea 100644 --- a/src/core/hle/service/am/applets/applet_error.cpp +++ b/src/core/hle/service/am/frontend/applet_error.cpp @@ -9,10 +9,11 @@ #include "core/core.h" #include "core/frontend/applets/error.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_error.h" +#include "core/hle/service/am/frontend/applet_error.h" +#include "core/hle/service/am/storage.h" #include "core/reporter.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { struct ErrorCode { u32 error_category{}; @@ -103,18 +104,18 @@ Result Decode64BitError(u64 error) { } // Anonymous namespace -Error::Error(Core::System& system_, LibraryAppletMode applet_mode_, +Error::Error(Core::System& system_, std::shared_ptr<Applet> applet_, LibraryAppletMode applet_mode_, const Core::Frontend::ErrorApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} Error::~Error() = default; void Error::Initialize() { - Applet::Initialize(); + FrontendApplet::Initialize(); args = std::make_unique<ErrorArguments>(); complete = false; - const auto storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> storage = PopInData(); ASSERT(storage != nullptr); const auto data = storage->GetData(); @@ -152,10 +153,6 @@ void Error::Initialize() { } } -bool Error::TransactionComplete() const { - return complete; -} - Result Error::GetStatus() const { return ResultSuccess; } @@ -210,8 +207,8 @@ void Error::Execute() { void Error::DisplayCompleted() { complete = true; - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::vector<u8>{})); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); + Exit(); } Result Error::RequestExit() { @@ -219,4 +216,4 @@ Result Error::RequestExit() { R_SUCCEED(); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_error.h b/src/core/hle/service/am/frontend/applet_error.h index d822a32bb..678bf33fa 100644 --- a/src/core/hle/service/am/applets/applet_error.h +++ b/src/core/hle/service/am/frontend/applet_error.h @@ -4,13 +4,13 @@ #pragma once #include "core/hle/result.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applets.h" namespace Core { class System; } -namespace Service::AM::Applets { +namespace Service::AM::Frontend { enum class ErrorAppletMode : u8 { ShowError = 0, @@ -22,15 +22,14 @@ enum class ErrorAppletMode : u8 { ShowUpdateEula = 8, }; -class Error final : public Applet { +class Error final : public FrontendApplet { public: - explicit Error(Core::System& system_, LibraryAppletMode applet_mode_, - const Core::Frontend::ErrorApplet& frontend_); + explicit Error(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::ErrorApplet& frontend_); ~Error() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -47,7 +46,6 @@ private: std::unique_ptr<ErrorArguments> args; bool complete = false; - Core::System& system; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_general_backend.cpp b/src/core/hle/service/am/frontend/applet_general.cpp index c0032f652..3c091a602 100644 --- a/src/core/hle/service/am/applets/applet_general_backend.cpp +++ b/src/core/hle/service/am/frontend/applet_general.cpp @@ -5,27 +5,28 @@ #include "common/hex_util.h" #include "common/logging/log.h" #include "core/core.h" -#include "core/frontend/applets/general_frontend.h" +#include "core/frontend/applets/general.h" #include "core/hle/result.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_general_backend.h" +#include "core/hle/service/am/applet_data_broker.h" +#include "core/hle/service/am/frontend/applet_general.h" +#include "core/hle/service/am/storage.h" #include "core/reporter.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { constexpr Result ERROR_INVALID_PIN{ErrorModule::PCTL, 221}; -static void LogCurrentStorage(AppletDataBroker& broker, std::string_view prefix) { - std::shared_ptr<IStorage> storage = broker.PopNormalDataToApplet(); - for (; storage != nullptr; storage = broker.PopNormalDataToApplet()) { +static void LogCurrentStorage(std::shared_ptr<Applet> applet, std::string_view prefix) { + std::shared_ptr<IStorage> storage; + while (R_SUCCEEDED(applet->caller_applet_broker->GetInData().Pop(&storage))) { const auto data = storage->GetData(); LOG_INFO(Service_AM, "called (STUBBED), during {} received normal data with size={:08X}, data={}", prefix, data.size(), Common::HexToString(data)); } - storage = broker.PopInteractiveDataToApplet(); - for (; storage != nullptr; storage = broker.PopInteractiveDataToApplet()) { + while (R_SUCCEEDED(applet->caller_applet_broker->GetInteractiveInData().Pop(&storage))) { const auto data = storage->GetData(); LOG_INFO(Service_AM, "called (STUBBED), during {} received interactive data with size={:08X}, data={}", @@ -33,17 +34,17 @@ static void LogCurrentStorage(AppletDataBroker& broker, std::string_view prefix) } } -Auth::Auth(Core::System& system_, LibraryAppletMode applet_mode_, +Auth::Auth(Core::System& system_, std::shared_ptr<Applet> applet_, LibraryAppletMode applet_mode_, Core::Frontend::ParentalControlsApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} Auth::~Auth() = default; void Auth::Initialize() { - Applet::Initialize(); + FrontendApplet::Initialize(); complete = false; - const auto storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> storage = PopInData(); ASSERT(storage != nullptr); const auto data = storage->GetData(); ASSERT(data.size() >= 0xC); @@ -67,10 +68,6 @@ void Auth::Initialize() { arg2 = arg.arg2; } -bool Auth::TransactionComplete() const { - return complete; -} - Result Auth::GetStatus() const { return successful ? ResultSuccess : ERROR_INVALID_PIN; } @@ -146,8 +143,8 @@ void Auth::AuthFinished(bool is_successful) { std::vector<u8> out(sizeof(Return)); std::memcpy(out.data(), &return_, sizeof(Return)); - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::move(out))); + Exit(); } Result Auth::RequestExit() { @@ -155,27 +152,24 @@ Result Auth::RequestExit() { R_SUCCEED(); } -PhotoViewer::PhotoViewer(Core::System& system_, LibraryAppletMode applet_mode_, +PhotoViewer::PhotoViewer(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::PhotoViewerApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} PhotoViewer::~PhotoViewer() = default; void PhotoViewer::Initialize() { - Applet::Initialize(); + FrontendApplet::Initialize(); complete = false; - const auto storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> storage = PopInData(); ASSERT(storage != nullptr); const auto data = storage->GetData(); ASSERT(!data.empty()); mode = static_cast<PhotoViewerAppletMode>(data[0]); } -bool PhotoViewer::TransactionComplete() const { - return complete; -} - Result PhotoViewer::GetStatus() const { return ResultSuccess; } @@ -203,8 +197,8 @@ void PhotoViewer::Execute() { } void PhotoViewer::ViewFinished() { - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::vector<u8>{})); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::vector<u8>{})); + Exit(); } Result PhotoViewer::RequestExit() { @@ -212,27 +206,17 @@ Result PhotoViewer::RequestExit() { R_SUCCEED(); } -StubApplet::StubApplet(Core::System& system_, AppletId id_, LibraryAppletMode applet_mode_) - : Applet{system_, applet_mode_}, id{id_}, system{system_} {} +StubApplet::StubApplet(Core::System& system_, std::shared_ptr<Applet> applet_, AppletId id_, + LibraryAppletMode applet_mode_) + : FrontendApplet{system_, applet_, applet_mode_}, id{id_} {} StubApplet::~StubApplet() = default; void StubApplet::Initialize() { LOG_WARNING(Service_AM, "called (STUBBED)"); - Applet::Initialize(); + FrontendApplet::Initialize(); - const auto data = broker.PeekDataToAppletForDebug(); - system.GetReporter().SaveUnimplementedAppletReport( - static_cast<u32>(id), static_cast<u32>(common_args.arguments_version), - common_args.library_version, static_cast<u32>(common_args.theme_color), - common_args.play_startup_sound, common_args.system_tick, data.normal, data.interactive); - - LogCurrentStorage(broker, "Initialize"); -} - -bool StubApplet::TransactionComplete() const { - LOG_WARNING(Service_AM, "called (STUBBED)"); - return true; + LogCurrentStorage(applet.lock(), "Initialize"); } Result StubApplet::GetStatus() const { @@ -242,22 +226,20 @@ Result StubApplet::GetStatus() const { void StubApplet::ExecuteInteractive() { LOG_WARNING(Service_AM, "called (STUBBED)"); - LogCurrentStorage(broker, "ExecuteInteractive"); + LogCurrentStorage(applet.lock(), "ExecuteInteractive"); - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); - broker.PushInteractiveDataFromApplet( - std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); + Exit(); } void StubApplet::Execute() { LOG_WARNING(Service_AM, "called (STUBBED)"); - LogCurrentStorage(broker, "Execute"); + LogCurrentStorage(applet.lock(), "Execute"); - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); - broker.PushInteractiveDataFromApplet( - std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::vector<u8>(0x1000))); + Exit(); } Result StubApplet::RequestExit() { @@ -265,4 +247,4 @@ Result StubApplet::RequestExit() { R_SUCCEED(); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_general_backend.h b/src/core/hle/service/am/frontend/applet_general.h index 34ecaebb9..eaa7ae25f 100644 --- a/src/core/hle/service/am/applets/applet_general_backend.h +++ b/src/core/hle/service/am/frontend/applet_general.h @@ -3,13 +3,13 @@ #pragma once -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applets.h" namespace Core { class System; } -namespace Service::AM::Applets { +namespace Service::AM::Frontend { enum class AuthAppletType : u32 { ShowParentalAuthentication, @@ -17,14 +17,14 @@ enum class AuthAppletType : u32 { ChangeParentalPasscode, }; -class Auth final : public Applet { +class Auth final : public FrontendApplet { public: - explicit Auth(Core::System& system_, LibraryAppletMode applet_mode_, + explicit Auth(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, Core::Frontend::ParentalControlsApplet& frontend_); ~Auth() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -34,7 +34,6 @@ public: private: Core::Frontend::ParentalControlsApplet& frontend; - Core::System& system; bool complete = false; bool successful = false; @@ -49,14 +48,14 @@ enum class PhotoViewerAppletMode : u8 { AllApps = 1, }; -class PhotoViewer final : public Applet { +class PhotoViewer final : public FrontendApplet { public: - explicit PhotoViewer(Core::System& system_, LibraryAppletMode applet_mode_, + explicit PhotoViewer(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::PhotoViewerApplet& frontend_); ~PhotoViewer() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -68,17 +67,16 @@ private: const Core::Frontend::PhotoViewerApplet& frontend; bool complete = false; PhotoViewerAppletMode mode = PhotoViewerAppletMode::CurrentApp; - Core::System& system; }; -class StubApplet final : public Applet { +class StubApplet final : public FrontendApplet { public: - explicit StubApplet(Core::System& system_, AppletId id_, LibraryAppletMode applet_mode_); + explicit StubApplet(Core::System& system_, std::shared_ptr<Applet> applet_, AppletId id_, + LibraryAppletMode applet_mode_); ~StubApplet() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -86,7 +84,6 @@ public: private: AppletId id; - Core::System& system; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_mii_edit.cpp b/src/core/hle/service/am/frontend/applet_mii_edit.cpp index e83e931c5..e3d19fb3d 100644 --- a/src/core/hle/service/am/applets/applet_mii_edit.cpp +++ b/src/core/hle/service/am/frontend/applet_mii_edit.cpp @@ -6,16 +6,17 @@ #include "core/core.h" #include "core/frontend/applets/mii_edit.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_mii_edit.h" +#include "core/hle/service/am/frontend/applet_mii_edit.h" +#include "core/hle/service/am/storage.h" #include "core/hle/service/mii/mii.h" #include "core/hle/service/mii/mii_manager.h" #include "core/hle/service/sm/sm.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { -MiiEdit::MiiEdit(Core::System& system_, LibraryAppletMode applet_mode_, - const Core::Frontend::MiiEditApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} +MiiEdit::MiiEdit(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::MiiEditApplet& frontend_) + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} MiiEdit::~MiiEdit() = default; @@ -24,7 +25,7 @@ void MiiEdit::Initialize() { // Instead, it is initialized by an AppletInput storage with size 0x100 bytes. // Do NOT call Applet::Initialize() here. - const auto storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> storage = PopInData(); ASSERT(storage != nullptr); const auto applet_input_data = storage->GetData(); @@ -66,10 +67,6 @@ void MiiEdit::Initialize() { manager->Initialize(metadata); } -bool MiiEdit::TransactionComplete() const { - return is_complete; -} - Result MiiEdit::GetStatus() const { return ResultSuccess; } @@ -152,8 +149,8 @@ void MiiEdit::MiiEditOutput(MiiEditResult result, s32 index) { is_complete = true; - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::move(out_data))); + Exit(); } void MiiEdit::MiiEditOutputForCharInfoEditing(MiiEditResult result, @@ -168,8 +165,8 @@ void MiiEdit::MiiEditOutputForCharInfoEditing(MiiEditResult result, is_complete = true; - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::move(out_data))); + Exit(); } Result MiiEdit::RequestExit() { @@ -177,4 +174,4 @@ Result MiiEdit::RequestExit() { R_SUCCEED(); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_mii_edit.h b/src/core/hle/service/am/frontend/applet_mii_edit.h index 7ff34af49..5db792f7d 100644 --- a/src/core/hle/service/am/applets/applet_mii_edit.h +++ b/src/core/hle/service/am/frontend/applet_mii_edit.h @@ -4,8 +4,8 @@ #pragma once #include "core/hle/result.h" -#include "core/hle/service/am/applets/applet_mii_edit_types.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applet_mii_edit_types.h" +#include "core/hle/service/am/frontend/applets.h" namespace Core { class System; @@ -16,17 +16,17 @@ struct DatabaseSessionMetadata; class MiiManager; } // namespace Service::Mii -namespace Service::AM::Applets { +namespace Service::AM::Frontend { -class MiiEdit final : public Applet { +class MiiEdit final : public FrontendApplet { public: - explicit MiiEdit(Core::System& system_, LibraryAppletMode applet_mode_, + explicit MiiEdit(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::MiiEditApplet& frontend_); ~MiiEdit() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -38,7 +38,6 @@ public: private: const Core::Frontend::MiiEditApplet& frontend; - Core::System& system; MiiEditAppletInputCommon applet_input_common{}; MiiEditAppletInputV3 applet_input_v3{}; @@ -49,4 +48,4 @@ private: Mii::DatabaseSessionMetadata metadata{}; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_mii_edit_types.h b/src/core/hle/service/am/frontend/applet_mii_edit_types.h index f3d764073..23d9d7a69 100644 --- a/src/core/hle/service/am/applets/applet_mii_edit_types.h +++ b/src/core/hle/service/am/frontend/applet_mii_edit_types.h @@ -10,7 +10,7 @@ #include "common/uuid.h" #include "core/hle/service/mii/types/char_info.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { enum class MiiEditAppletVersion : s32 { Version3 = 0x3, // 1.0.0 - 10.1.1 @@ -80,4 +80,4 @@ struct MiiEditAppletOutputForCharInfoEditing { static_assert(sizeof(MiiEditAppletOutputForCharInfoEditing) == 0x80, "MiiEditAppletOutputForCharInfoEditing has incorrect size."); -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_profile_select.cpp b/src/core/hle/service/am/frontend/applet_profile_select.cpp index 89cb323e9..efb4053b8 100644 --- a/src/core/hle/service/am/applets/applet_profile_select.cpp +++ b/src/core/hle/service/am/frontend/applet_profile_select.cpp @@ -9,13 +9,15 @@ #include "core/frontend/applets/profile_select.h" #include "core/hle/service/acc/errors.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_profile_select.h" +#include "core/hle/service/am/frontend/applet_profile_select.h" +#include "core/hle/service/am/storage.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { -ProfileSelect::ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_, +ProfileSelect::ProfileSelect(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::ProfileSelectApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} ProfileSelect::~ProfileSelect() = default; @@ -24,10 +26,10 @@ void ProfileSelect::Initialize() { status = ResultSuccess; final_data.clear(); - Applet::Initialize(); + FrontendApplet::Initialize(); profile_select_version = ProfileSelectAppletVersion{common_args.library_version}; - const auto user_config_storage = broker.PopNormalDataToApplet(); + const std::shared_ptr<IStorage> user_config_storage = PopInData(); ASSERT(user_config_storage != nullptr); const auto& user_config = user_config_storage->GetData(); @@ -50,10 +52,6 @@ void ProfileSelect::Initialize() { } } -bool ProfileSelect::TransactionComplete() const { - return complete; -} - Result ProfileSelect::GetStatus() const { return status; } @@ -64,7 +62,8 @@ void ProfileSelect::ExecuteInteractive() { void ProfileSelect::Execute() { if (complete) { - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(final_data))); + PushOutData(std::make_shared<IStorage>(system, std::move(final_data))); + Exit(); return; } @@ -111,8 +110,9 @@ void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) { 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(); + + PushOutData(std::make_shared<IStorage>(system, std::move(final_data))); + Exit(); } Result ProfileSelect::RequestExit() { @@ -120,4 +120,4 @@ Result ProfileSelect::RequestExit() { R_SUCCEED(); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_profile_select.h b/src/core/hle/service/am/frontend/applet_profile_select.h index 673eed516..674e7afe1 100644 --- a/src/core/hle/service/am/applets/applet_profile_select.h +++ b/src/core/hle/service/am/frontend/applet_profile_select.h @@ -8,13 +8,13 @@ #include "common/common_funcs.h" #include "common/uuid.h" #include "core/hle/result.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applets.h" namespace Core { class System; } -namespace Service::AM::Applets { +namespace Service::AM::Frontend { enum class ProfileSelectAppletVersion : u32 { Version1 = 0x1, // 1.0.0+ @@ -111,15 +111,15 @@ struct UiReturnArg { }; static_assert(sizeof(UiReturnArg) == 0x18, "UiReturnArg has incorrect size."); -class ProfileSelect final : public Applet { +class ProfileSelect final : public FrontendApplet { public: - explicit ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_, + explicit ProfileSelect(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::ProfileSelectApplet& frontend_); ~ProfileSelect() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -137,7 +137,6 @@ private: bool complete = false; Result status = ResultSuccess; std::vector<u8> final_data; - Core::System& system; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_software_keyboard.cpp b/src/core/hle/service/am/frontend/applet_software_keyboard.cpp index 4145bb84f..fbf75d379 100644 --- a/src/core/hle/service/am/applets/applet_software_keyboard.cpp +++ b/src/core/hle/service/am/frontend/applet_software_keyboard.cpp @@ -5,9 +5,10 @@ #include "core/core.h" #include "core/frontend/applets/software_keyboard.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_software_keyboard.h" +#include "core/hle/service/am/frontend/applet_software_keyboard.h" +#include "core/hle/service/am/storage.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { namespace { @@ -41,14 +42,15 @@ void SetReplyBase(std::vector<u8>& reply, SwkbdState state, SwkbdReplyType reply } // Anonymous namespace -SoftwareKeyboard::SoftwareKeyboard(Core::System& system_, LibraryAppletMode applet_mode_, +SoftwareKeyboard::SoftwareKeyboard(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, Core::Frontend::SoftwareKeyboardApplet& frontend_) - : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} SoftwareKeyboard::~SoftwareKeyboard() = default; void SoftwareKeyboard::Initialize() { - Applet::Initialize(); + FrontendApplet::Initialize(); LOG_INFO(Service_AM, "Initializing Software Keyboard Applet with LibraryAppletMode={}", applet_mode); @@ -76,10 +78,6 @@ void SoftwareKeyboard::Initialize() { } } -bool SoftwareKeyboard::TransactionComplete() const { - return complete; -} - Result SoftwareKeyboard::GetStatus() const { return status; } @@ -184,7 +182,7 @@ void SoftwareKeyboard::InitializeForeground() { is_background = false; - const auto swkbd_config_storage = broker.PopNormalDataToApplet(); + const auto swkbd_config_storage = PopInData(); ASSERT(swkbd_config_storage != nullptr); const auto& swkbd_config_data = swkbd_config_storage->GetData(); @@ -221,7 +219,7 @@ void SoftwareKeyboard::InitializeForeground() { break; } - const auto work_buffer_storage = broker.PopNormalDataToApplet(); + const auto work_buffer_storage = PopInData(); ASSERT(work_buffer_storage != nullptr); if (swkbd_config_common.initial_string_length == 0) { @@ -250,7 +248,7 @@ void SoftwareKeyboard::InitializeBackground(LibraryAppletMode library_applet_mod is_background = true; - const auto swkbd_inline_initialize_arg_storage = broker.PopNormalDataToApplet(); + const auto swkbd_inline_initialize_arg_storage = PopInData(); ASSERT(swkbd_inline_initialize_arg_storage != nullptr); const auto& swkbd_inline_initialize_arg = swkbd_inline_initialize_arg_storage->GetData(); @@ -267,7 +265,7 @@ void SoftwareKeyboard::InitializeBackground(LibraryAppletMode library_applet_mod } void SoftwareKeyboard::ProcessTextCheck() { - const auto text_check_storage = broker.PopInteractiveDataToApplet(); + const auto text_check_storage = PopInteractiveInData(); ASSERT(text_check_storage != nullptr); const auto& text_check_data = text_check_storage->GetData(); @@ -314,7 +312,7 @@ void SoftwareKeyboard::ProcessTextCheck() { } void SoftwareKeyboard::ProcessInlineKeyboardRequest() { - const auto request_data_storage = broker.PopInteractiveDataToApplet(); + const auto request_data_storage = PopInteractiveInData(); ASSERT(request_data_storage != nullptr); const auto& request_data = request_data_storage->GetData(); @@ -377,7 +375,7 @@ void SoftwareKeyboard::SubmitNormalOutputAndExit(SwkbdResult result, submitted_text.size() * sizeof(char16_t)); } - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); + PushOutData(std::make_shared<IStorage>(system, std::move(out_data))); ExitKeyboard(); } @@ -410,7 +408,7 @@ void SoftwareKeyboard::SubmitForTextCheck(std::u16string submitted_text) { current_text.size() * sizeof(char16_t)); } - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(out_data))); } void SoftwareKeyboard::SendReply(SwkbdReplyType reply_type) { @@ -767,7 +765,7 @@ void SoftwareKeyboard::ExitKeyboard() { frontend.ExitKeyboard(); - broker.SignalStateChanged(); + Exit(); } Result SoftwareKeyboard::RequestExit() { @@ -967,7 +965,7 @@ void SoftwareKeyboard::ReplyFinishedInitialize() { SetReplyBase(reply, swkbd_state, SwkbdReplyType::FinishedInitialize); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyDefault() { @@ -977,7 +975,7 @@ void SoftwareKeyboard::ReplyDefault() { SetReplyBase(reply, swkbd_state, SwkbdReplyType::Default); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyChangedString() { @@ -999,7 +997,7 @@ void SoftwareKeyboard::ReplyChangedString() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF16_SIZE, &changed_string_arg, sizeof(SwkbdChangedStringArg)); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyMovedCursor() { @@ -1019,7 +1017,7 @@ void SoftwareKeyboard::ReplyMovedCursor() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF16_SIZE, &moved_cursor_arg, sizeof(SwkbdMovedCursorArg)); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyMovedTab() { @@ -1039,7 +1037,7 @@ void SoftwareKeyboard::ReplyMovedTab() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF16_SIZE, &moved_tab_arg, sizeof(SwkbdMovedTabArg)); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyDecidedEnter() { @@ -1058,7 +1056,7 @@ void SoftwareKeyboard::ReplyDecidedEnter() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF16_SIZE, &decided_enter_arg, sizeof(SwkbdDecidedEnterArg)); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); HideInlineKeyboard(); } @@ -1070,7 +1068,7 @@ void SoftwareKeyboard::ReplyDecidedCancel() { SetReplyBase(reply, swkbd_state, SwkbdReplyType::DecidedCancel); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); HideInlineKeyboard(); } @@ -1095,7 +1093,7 @@ void SoftwareKeyboard::ReplyChangedStringUtf8() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF8_SIZE, &changed_string_arg, sizeof(SwkbdChangedStringArg)); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyMovedCursorUtf8() { @@ -1116,7 +1114,7 @@ void SoftwareKeyboard::ReplyMovedCursorUtf8() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF8_SIZE, &moved_cursor_arg, sizeof(SwkbdMovedCursorArg)); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyDecidedEnterUtf8() { @@ -1136,7 +1134,7 @@ void SoftwareKeyboard::ReplyDecidedEnterUtf8() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF8_SIZE, &decided_enter_arg, sizeof(SwkbdDecidedEnterArg)); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); HideInlineKeyboard(); } @@ -1148,7 +1146,7 @@ void SoftwareKeyboard::ReplyUnsetCustomizeDic() { SetReplyBase(reply, swkbd_state, SwkbdReplyType::UnsetCustomizeDic); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyReleasedUserWordInfo() { @@ -1158,7 +1156,7 @@ void SoftwareKeyboard::ReplyReleasedUserWordInfo() { SetReplyBase(reply, swkbd_state, SwkbdReplyType::ReleasedUserWordInfo); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyUnsetCustomizedDictionaries() { @@ -1168,7 +1166,7 @@ void SoftwareKeyboard::ReplyUnsetCustomizedDictionaries() { SetReplyBase(reply, swkbd_state, SwkbdReplyType::UnsetCustomizedDictionaries); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyChangedStringV2() { @@ -1194,7 +1192,7 @@ void SoftwareKeyboard::ReplyChangedStringV2() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF16_SIZE + sizeof(SwkbdChangedStringArg), &flag, 1); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyMovedCursorV2() { @@ -1218,7 +1216,7 @@ void SoftwareKeyboard::ReplyMovedCursorV2() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF16_SIZE + sizeof(SwkbdMovedCursorArg), &flag, 1); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyChangedStringUtf8V2() { @@ -1245,7 +1243,7 @@ void SoftwareKeyboard::ReplyChangedStringUtf8V2() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF8_SIZE + sizeof(SwkbdChangedStringArg), &flag, 1); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } void SoftwareKeyboard::ReplyMovedCursorUtf8V2() { @@ -1270,7 +1268,7 @@ void SoftwareKeyboard::ReplyMovedCursorUtf8V2() { std::memcpy(reply.data() + REPLY_BASE_SIZE + REPLY_UTF8_SIZE + sizeof(SwkbdMovedCursorArg), &flag, 1); - broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); + PushInteractiveOutData(std::make_shared<IStorage>(system, std::move(reply))); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_software_keyboard.h b/src/core/hle/service/am/frontend/applet_software_keyboard.h index 2e919811b..f464b7e15 100644 --- a/src/core/hle/service/am/applets/applet_software_keyboard.h +++ b/src/core/hle/service/am/frontend/applet_software_keyboard.h @@ -5,8 +5,8 @@ #include "common/common_types.h" #include "core/hle/result.h" -#include "core/hle/service/am/applets/applet_software_keyboard_types.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applet_software_keyboard_types.h" +#include "core/hle/service/am/frontend/applets.h" namespace Core { class System; @@ -17,17 +17,17 @@ struct KeyboardInitializeParameters; struct InlineAppearParameters; } // namespace Core::Frontend -namespace Service::AM::Applets { +namespace Service::AM::Frontend { -class SoftwareKeyboard final : public Applet { +class SoftwareKeyboard final : public FrontendApplet { public: - explicit SoftwareKeyboard(Core::System& system_, LibraryAppletMode applet_mode_, + explicit SoftwareKeyboard(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, Core::Frontend::SoftwareKeyboardApplet& frontend_); ~SoftwareKeyboard() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -156,7 +156,6 @@ private: void ReplyMovedCursorUtf8V2(); Core::Frontend::SoftwareKeyboardApplet& frontend; - Core::System& system; SwkbdAppletVersion swkbd_applet_version; @@ -184,4 +183,4 @@ private: Result status{ResultSuccess}; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_software_keyboard_types.h b/src/core/hle/service/am/frontend/applet_software_keyboard_types.h index 1f696900e..a25ff2a6d 100644 --- a/src/core/hle/service/am/applets/applet_software_keyboard_types.h +++ b/src/core/hle/service/am/frontend/applet_software_keyboard_types.h @@ -11,7 +11,7 @@ #include "common/swap.h" #include "common/uuid.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { constexpr std::size_t MAX_OK_TEXT_LENGTH = 8; constexpr std::size_t MAX_HEADER_TEXT_LENGTH = 64; @@ -351,4 +351,4 @@ struct SwkbdDecidedEnterArg { }; static_assert(sizeof(SwkbdDecidedEnterArg) == 0x4, "SwkbdDecidedEnterArg has incorrect size."); -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_web_browser.cpp b/src/core/hle/service/am/frontend/applet_web_browser.cpp index 19057ad7b..6ee4caf34 100644 --- a/src/core/hle/service/am/applets/applet_web_browser.cpp +++ b/src/core/hle/service/am/frontend/applet_web_browser.cpp @@ -19,12 +19,13 @@ #include "core/frontend/applets/web_browser.h" #include "core/hle/result.h" #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/applet_web_browser.h" +#include "core/hle/service/am/frontend/applet_web_browser.h" +#include "core/hle/service/am/storage.h" #include "core/hle/service/filesystem/filesystem.h" #include "core/hle/service/ns/iplatform_service_manager.h" #include "core/loader/loader.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { namespace { @@ -223,14 +224,15 @@ void ExtractSharedFonts(Core::System& system) { } // namespace -WebBrowser::WebBrowser(Core::System& system_, LibraryAppletMode applet_mode_, +WebBrowser::WebBrowser(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::WebBrowserApplet& frontend_) - : Applet{system_, applet_mode_}, frontend(frontend_), system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend(frontend_) {} WebBrowser::~WebBrowser() = default; void WebBrowser::Initialize() { - Applet::Initialize(); + FrontendApplet::Initialize(); LOG_INFO(Service_AM, "Initializing Web Browser Applet."); @@ -243,7 +245,7 @@ void WebBrowser::Initialize() { web_applet_version = WebAppletVersion{common_args.library_version}; - const auto web_arg_storage = broker.PopNormalDataToApplet(); + const auto web_arg_storage = PopInData(); ASSERT(web_arg_storage != nullptr); const auto& web_arg = web_arg_storage->GetData(); @@ -284,10 +286,6 @@ void WebBrowser::Initialize() { } } -bool WebBrowser::TransactionComplete() const { - return complete; -} - Result WebBrowser::GetStatus() const { return status; } @@ -358,8 +356,8 @@ void WebBrowser::WebBrowserExit(WebExitReason exit_reason, std::string last_url) complete = true; std::vector<u8> out_data(sizeof(WebCommonReturnValue)); std::memcpy(out_data.data(), &web_common_return_value, out_data.size()); - broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); - broker.SignalStateChanged(); + PushOutData(std::make_shared<IStorage>(system, std::move(out_data))); + Exit(); } Result WebBrowser::RequestExit() { @@ -504,4 +502,4 @@ void WebBrowser::ExecuteLobby() { LOG_WARNING(Service_AM, "(STUBBED) called, Lobby Applet is not implemented"); WebBrowserExit(WebExitReason::EndButtonPressed); } -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_web_browser.h b/src/core/hle/service/am/frontend/applet_web_browser.h index 36adb2510..ba20b7a4c 100644 --- a/src/core/hle/service/am/applets/applet_web_browser.h +++ b/src/core/hle/service/am/frontend/applet_web_browser.h @@ -9,8 +9,8 @@ #include "common/common_types.h" #include "core/file_sys/vfs/vfs_types.h" #include "core/hle/result.h" -#include "core/hle/service/am/applets/applet_web_browser_types.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applet_web_browser_types.h" +#include "core/hle/service/am/frontend/applets.h" namespace Core { class System; @@ -20,18 +20,17 @@ namespace FileSys { enum class ContentRecordType : u8; } -namespace Service::AM::Applets { +namespace Service::AM::Frontend { -class WebBrowser final : public Applet { +class WebBrowser final : public FrontendApplet { public: - WebBrowser(Core::System& system_, LibraryAppletMode applet_mode_, - const Core::Frontend::WebBrowserApplet& frontend_); + WebBrowser(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::WebBrowserApplet& frontend_); ~WebBrowser() override; void Initialize() override; - bool TransactionComplete() const override; Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; @@ -80,8 +79,6 @@ private: FileSys::VirtualFile offline_romfs; std::string external_url; - - Core::System& system; }; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/applets/applet_web_browser_types.h b/src/core/hle/service/am/frontend/applet_web_browser_types.h index c522c5c1a..2f7c05c24 100644 --- a/src/core/hle/service/am/applets/applet_web_browser_types.h +++ b/src/core/hle/service/am/frontend/applet_web_browser_types.h @@ -11,7 +11,7 @@ #include "common/common_types.h" #include "common/swap.h" -namespace Service::AM::Applets { +namespace Service::AM::Frontend { enum class WebAppletVersion : u32_le { Version0 = 0x0, // Only used by WifiWebAuthApplet @@ -174,4 +174,4 @@ static_assert(sizeof(WebCommonReturnValue) == 0x1010, "WebCommonReturnValue has using WebArgInputTLVMap = std::unordered_map<WebArgInputTLVType, std::vector<u8>>; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/frontend/applets.cpp b/src/core/hle/service/am/frontend/applets.cpp new file mode 100644 index 000000000..db2b04575 --- /dev/null +++ b/src/core/hle/service/am/frontend/applets.cpp @@ -0,0 +1,240 @@ +// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <cstring> + +#include "common/assert.h" +#include "core/core.h" +#include "core/frontend/applets/cabinet.h" +#include "core/frontend/applets/controller.h" +#include "core/frontend/applets/error.h" +#include "core/frontend/applets/general.h" +#include "core/frontend/applets/mii_edit.h" +#include "core/frontend/applets/profile_select.h" +#include "core/frontend/applets/software_keyboard.h" +#include "core/frontend/applets/web_browser.h" +#include "core/hle/kernel/k_event.h" +#include "core/hle/service/am/am.h" +#include "core/hle/service/am/applet_ae.h" +#include "core/hle/service/am/applet_data_broker.h" +#include "core/hle/service/am/applet_manager.h" +#include "core/hle/service/am/applet_message_queue.h" +#include "core/hle/service/am/applet_oe.h" +#include "core/hle/service/am/frontend/applet_cabinet.h" +#include "core/hle/service/am/frontend/applet_controller.h" +#include "core/hle/service/am/frontend/applet_error.h" +#include "core/hle/service/am/frontend/applet_general.h" +#include "core/hle/service/am/frontend/applet_mii_edit.h" +#include "core/hle/service/am/frontend/applet_profile_select.h" +#include "core/hle/service/am/frontend/applet_software_keyboard.h" +#include "core/hle/service/am/frontend/applet_web_browser.h" +#include "core/hle/service/am/frontend/applets.h" +#include "core/hle/service/am/storage.h" +#include "core/hle/service/sm/sm.h" + +namespace Service::AM::Frontend { + +FrontendApplet::FrontendApplet(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_) + : system{system_}, applet{std::move(applet_)}, applet_mode{applet_mode_} {} + +FrontendApplet::~FrontendApplet() = default; + +void FrontendApplet::Initialize() { + std::shared_ptr<IStorage> common = PopInData(); + ASSERT(common != nullptr); + const auto common_data = common->GetData(); + + ASSERT(common_data.size() >= sizeof(CommonArguments)); + std::memcpy(&common_args, common_data.data(), sizeof(CommonArguments)); + + initialized = true; +} + +std::shared_ptr<IStorage> FrontendApplet::PopInData() { + std::shared_ptr<IStorage> ret; + applet.lock()->caller_applet_broker->GetInData().Pop(&ret); + return ret; +} + +std::shared_ptr<IStorage> FrontendApplet::PopInteractiveInData() { + std::shared_ptr<IStorage> ret; + applet.lock()->caller_applet_broker->GetInteractiveInData().Pop(&ret); + return ret; +} + +void FrontendApplet::PushOutData(std::shared_ptr<IStorage> storage) { + applet.lock()->caller_applet_broker->GetOutData().Push(storage); +} + +void FrontendApplet::PushInteractiveOutData(std::shared_ptr<IStorage> storage) { + applet.lock()->caller_applet_broker->GetInteractiveOutData().Push(storage); +} + +void FrontendApplet::Exit() { + applet.lock()->caller_applet_broker->SignalCompletion(); +} + +FrontendAppletSet::FrontendAppletSet() = default; + +FrontendAppletSet::FrontendAppletSet(CabinetApplet cabinet_applet, + ControllerApplet controller_applet, ErrorApplet error_applet, + MiiEdit mii_edit_, + ParentalControlsApplet parental_controls_applet, + PhotoViewer photo_viewer_, ProfileSelect profile_select_, + SoftwareKeyboard software_keyboard_, WebBrowser web_browser_) + : cabinet{std::move(cabinet_applet)}, controller{std::move(controller_applet)}, + error{std::move(error_applet)}, mii_edit{std::move(mii_edit_)}, + parental_controls{std::move(parental_controls_applet)}, + photo_viewer{std::move(photo_viewer_)}, profile_select{std::move(profile_select_)}, + software_keyboard{std::move(software_keyboard_)}, web_browser{std::move(web_browser_)} {} + +FrontendAppletSet::~FrontendAppletSet() = default; + +FrontendAppletSet::FrontendAppletSet(FrontendAppletSet&&) noexcept = default; + +FrontendAppletSet& FrontendAppletSet::operator=(FrontendAppletSet&&) noexcept = default; + +FrontendAppletHolder::FrontendAppletHolder(Core::System& system_) : system{system_} {} + +FrontendAppletHolder::~FrontendAppletHolder() = default; + +const FrontendAppletSet& FrontendAppletHolder::GetFrontendAppletSet() const { + return frontend; +} + +NFP::CabinetMode FrontendAppletHolder::GetCabinetMode() const { + return cabinet_mode; +} + +AppletId FrontendAppletHolder::GetCurrentAppletId() const { + return current_applet_id; +} + +void FrontendAppletHolder::SetFrontendAppletSet(FrontendAppletSet set) { + if (set.cabinet != nullptr) { + frontend.cabinet = std::move(set.cabinet); + } + + if (set.controller != nullptr) { + frontend.controller = std::move(set.controller); + } + + if (set.error != nullptr) { + frontend.error = std::move(set.error); + } + + if (set.mii_edit != nullptr) { + frontend.mii_edit = std::move(set.mii_edit); + } + + if (set.parental_controls != nullptr) { + frontend.parental_controls = std::move(set.parental_controls); + } + + if (set.photo_viewer != nullptr) { + frontend.photo_viewer = std::move(set.photo_viewer); + } + + if (set.profile_select != nullptr) { + frontend.profile_select = std::move(set.profile_select); + } + + if (set.software_keyboard != nullptr) { + frontend.software_keyboard = std::move(set.software_keyboard); + } + + if (set.web_browser != nullptr) { + frontend.web_browser = std::move(set.web_browser); + } +} + +void FrontendAppletHolder::SetCabinetMode(NFP::CabinetMode mode) { + cabinet_mode = mode; +} + +void FrontendAppletHolder::SetCurrentAppletId(AppletId applet_id) { + current_applet_id = applet_id; +} + +void FrontendAppletHolder::SetDefaultAppletsIfMissing() { + if (frontend.cabinet == nullptr) { + frontend.cabinet = std::make_unique<Core::Frontend::DefaultCabinetApplet>(); + } + + if (frontend.controller == nullptr) { + frontend.controller = + std::make_unique<Core::Frontend::DefaultControllerApplet>(system.HIDCore()); + } + + if (frontend.error == nullptr) { + frontend.error = std::make_unique<Core::Frontend::DefaultErrorApplet>(); + } + + if (frontend.mii_edit == nullptr) { + frontend.mii_edit = std::make_unique<Core::Frontend::DefaultMiiEditApplet>(); + } + + if (frontend.parental_controls == nullptr) { + frontend.parental_controls = + std::make_unique<Core::Frontend::DefaultParentalControlsApplet>(); + } + + if (frontend.photo_viewer == nullptr) { + frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>(); + } + + if (frontend.profile_select == nullptr) { + frontend.profile_select = std::make_unique<Core::Frontend::DefaultProfileSelectApplet>(); + } + + if (frontend.software_keyboard == nullptr) { + frontend.software_keyboard = + std::make_unique<Core::Frontend::DefaultSoftwareKeyboardApplet>(); + } + + if (frontend.web_browser == nullptr) { + frontend.web_browser = std::make_unique<Core::Frontend::DefaultWebBrowserApplet>(); + } +} + +void FrontendAppletHolder::ClearAll() { + frontend = {}; +} + +std::shared_ptr<FrontendApplet> FrontendAppletHolder::GetApplet(std::shared_ptr<Applet> applet, + AppletId id, + LibraryAppletMode mode) const { + switch (id) { + case AppletId::Auth: + return std::make_shared<Auth>(system, applet, mode, *frontend.parental_controls); + case AppletId::Cabinet: + return std::make_shared<Cabinet>(system, applet, mode, *frontend.cabinet); + case AppletId::Controller: + return std::make_shared<Controller>(system, applet, mode, *frontend.controller); + case AppletId::Error: + return std::make_shared<Error>(system, applet, mode, *frontend.error); + case AppletId::ProfileSelect: + return std::make_shared<ProfileSelect>(system, applet, mode, *frontend.profile_select); + case AppletId::SoftwareKeyboard: + return std::make_shared<SoftwareKeyboard>(system, applet, mode, + *frontend.software_keyboard); + case AppletId::MiiEdit: + return std::make_shared<MiiEdit>(system, applet, mode, *frontend.mii_edit); + case AppletId::Web: + case AppletId::Shop: + case AppletId::OfflineWeb: + case AppletId::LoginShare: + case AppletId::WebAuth: + return std::make_shared<WebBrowser>(system, applet, mode, *frontend.web_browser); + case AppletId::PhotoViewer: + return std::make_shared<PhotoViewer>(system, applet, mode, *frontend.photo_viewer); + default: + UNIMPLEMENTED_MSG( + "No backend implementation exists for applet_id={:02X}! Falling back to stub applet.", + static_cast<u8>(id)); + return std::make_shared<StubApplet>(system, applet, id, mode); + } +} + +} // namespace Service::AM::Frontend diff --git a/src/core/hle/service/am/frontend/applets.h b/src/core/hle/service/am/frontend/applets.h new file mode 100644 index 000000000..1e1fd28b8 --- /dev/null +++ b/src/core/hle/service/am/frontend/applets.h @@ -0,0 +1,146 @@ +// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <memory> +#include <queue> + +#include "common/swap.h" +#include "core/hle/service/am/applet.h" + +union Result; + +namespace Core { +class System; +} + +namespace Core::Frontend { +class CabinetApplet; +class ControllerApplet; +class ECommerceApplet; +class ErrorApplet; +class MiiEditApplet; +class ParentalControlsApplet; +class PhotoViewerApplet; +class ProfileSelectApplet; +class SoftwareKeyboardApplet; +class WebBrowserApplet; +} // namespace Core::Frontend + +namespace Kernel { +class KernelCore; +class KEvent; +class KReadableEvent; +} // namespace Kernel + +namespace Service::NFP { +enum class CabinetMode : u8; +} // namespace Service::NFP + +namespace Service::AM { + +class IStorage; + +namespace Frontend { + +class FrontendApplet { +public: + explicit FrontendApplet(Core::System& system_, std::shared_ptr<Applet> applet_, + LibraryAppletMode applet_mode_); + virtual ~FrontendApplet(); + + virtual void Initialize(); + + virtual Result GetStatus() const = 0; + virtual void ExecuteInteractive() = 0; + virtual void Execute() = 0; + virtual Result RequestExit() = 0; + + LibraryAppletMode GetLibraryAppletMode() const { + return applet_mode; + } + + bool IsInitialized() const { + return initialized; + } + +protected: + std::shared_ptr<IStorage> PopInData(); + std::shared_ptr<IStorage> PopInteractiveInData(); + void PushOutData(std::shared_ptr<IStorage> storage); + void PushInteractiveOutData(std::shared_ptr<IStorage> storage); + void Exit(); + +protected: + Core::System& system; + CommonArguments common_args{}; + std::weak_ptr<Applet> applet{}; + LibraryAppletMode applet_mode{}; + bool initialized{false}; +}; + +struct FrontendAppletSet { + using CabinetApplet = std::unique_ptr<Core::Frontend::CabinetApplet>; + using ControllerApplet = std::unique_ptr<Core::Frontend::ControllerApplet>; + using ErrorApplet = std::unique_ptr<Core::Frontend::ErrorApplet>; + using MiiEdit = std::unique_ptr<Core::Frontend::MiiEditApplet>; + using ParentalControlsApplet = std::unique_ptr<Core::Frontend::ParentalControlsApplet>; + using PhotoViewer = std::unique_ptr<Core::Frontend::PhotoViewerApplet>; + using ProfileSelect = std::unique_ptr<Core::Frontend::ProfileSelectApplet>; + using SoftwareKeyboard = std::unique_ptr<Core::Frontend::SoftwareKeyboardApplet>; + using WebBrowser = std::unique_ptr<Core::Frontend::WebBrowserApplet>; + + FrontendAppletSet(); + FrontendAppletSet(CabinetApplet cabinet_applet, ControllerApplet controller_applet, + ErrorApplet error_applet, MiiEdit mii_edit_, + ParentalControlsApplet parental_controls_applet, PhotoViewer photo_viewer_, + ProfileSelect profile_select_, SoftwareKeyboard software_keyboard_, + WebBrowser web_browser_); + ~FrontendAppletSet(); + + FrontendAppletSet(const FrontendAppletSet&) = delete; + FrontendAppletSet& operator=(const FrontendAppletSet&) = delete; + + FrontendAppletSet(FrontendAppletSet&&) noexcept; + FrontendAppletSet& operator=(FrontendAppletSet&&) noexcept; + + CabinetApplet cabinet; + ControllerApplet controller; + ErrorApplet error; + MiiEdit mii_edit; + ParentalControlsApplet parental_controls; + PhotoViewer photo_viewer; + ProfileSelect profile_select; + SoftwareKeyboard software_keyboard; + WebBrowser web_browser; +}; + +class FrontendAppletHolder { +public: + explicit FrontendAppletHolder(Core::System& system_); + ~FrontendAppletHolder(); + + const FrontendAppletSet& GetFrontendAppletSet() const; + NFP::CabinetMode GetCabinetMode() const; + AppletId GetCurrentAppletId() const; + + void SetFrontendAppletSet(FrontendAppletSet set); + void SetCabinetMode(NFP::CabinetMode mode); + void SetCurrentAppletId(AppletId applet_id); + void SetDefaultAppletsIfMissing(); + void ClearAll(); + + std::shared_ptr<FrontendApplet> GetApplet(std::shared_ptr<Applet> applet, AppletId id, + LibraryAppletMode mode) const; + +private: + AppletId current_applet_id{}; + NFP::CabinetMode cabinet_mode{}; + + FrontendAppletSet frontend; + Core::System& system; +}; + +} // namespace Frontend +} // namespace Service::AM diff --git a/src/core/hle/service/am/global_state_controller.cpp b/src/core/hle/service/am/global_state_controller.cpp new file mode 100644 index 000000000..ed0eb7108 --- /dev/null +++ b/src/core/hle/service/am/global_state_controller.cpp @@ -0,0 +1,34 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/global_state_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IGlobalStateController::IGlobalStateController(Core::System& system_) + : ServiceFramework{system_, "IGlobalStateController"} { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "RequestToEnterSleep"}, + {1, nullptr, "EnterSleep"}, + {2, nullptr, "StartSleepSequence"}, + {3, nullptr, "StartShutdownSequence"}, + {4, nullptr, "StartRebootSequence"}, + {9, nullptr, "IsAutoPowerDownRequested"}, + {10, nullptr, "LoadAndApplyIdlePolicySettings"}, + {11, nullptr, "NotifyCecSettingsChanged"}, + {12, nullptr, "SetDefaultHomeButtonLongPressTime"}, + {13, nullptr, "UpdateDefaultDisplayResolution"}, + {14, nullptr, "ShouldSleepOnBoot"}, + {15, nullptr, "GetHdcpAuthenticationFailedEvent"}, + {30, nullptr, "OpenCradleFirmwareUpdater"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IGlobalStateController::~IGlobalStateController() = default; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/global_state_controller.h b/src/core/hle/service/am/global_state_controller.h new file mode 100644 index 000000000..7125464a1 --- /dev/null +++ b/src/core/hle/service/am/global_state_controller.h @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +class IGlobalStateController final : public ServiceFramework<IGlobalStateController> { +public: + explicit IGlobalStateController(Core::System& system_); + ~IGlobalStateController() override; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/hid_registration.cpp b/src/core/hle/service/am/hid_registration.cpp new file mode 100644 index 000000000..8ed49bac1 --- /dev/null +++ b/src/core/hle/service/am/hid_registration.cpp @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/core.h" +#include "core/hle/service/am/hid_registration.h" +#include "core/hle/service/am/process.h" +#include "core/hle/service/hid/hid_server.h" +#include "core/hle/service/sm/sm.h" +#include "hid_core/resource_manager.h" + +namespace Service::AM { + +HidRegistration::HidRegistration(Core::System& system, Process& process) : m_process(process) { + m_hid_server = system.ServiceManager().GetService<HID::IHidServer>("hid"); + + if (m_process.IsInitialized()) { + m_hid_server->GetResourceManager()->RegisterAppletResourceUserId(m_process.GetProcessId(), + true); + } +} + +HidRegistration::~HidRegistration() { + if (m_process.IsInitialized()) { + m_hid_server->GetResourceManager()->UnregisterAppletResourceUserId( + m_process.GetProcessId()); + } +} + +void HidRegistration::EnableAppletToGetInput(bool enable) { + if (m_process.IsInitialized()) { + m_hid_server->GetResourceManager()->EnableInput(m_process.GetProcessId(), enable); + } +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/hid_registration.h b/src/core/hle/service/am/hid_registration.h new file mode 100644 index 000000000..67cd84961 --- /dev/null +++ b/src/core/hle/service/am/hid_registration.h @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <memory> + +namespace Core { +class System; +} + +namespace Service::HID { +class IHidServer; +} + +namespace Service::AM { + +class Process; + +class HidRegistration { +public: + explicit HidRegistration(Core::System& system, Process& process); + ~HidRegistration(); + + void EnableAppletToGetInput(bool enable); + +private: + Process& m_process; + std::shared_ptr<Service::HID::IHidServer> m_hid_server; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/home_menu_functions.cpp b/src/core/hle/service/am/home_menu_functions.cpp new file mode 100644 index 000000000..640e9fbb7 --- /dev/null +++ b/src/core/hle/service/am/home_menu_functions.cpp @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/home_menu_functions.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_) + : ServiceFramework{system_, "IHomeMenuFunctions"}, service_context{system, + "IHomeMenuFunctions"} { + // clang-format off + static const FunctionInfo functions[] = { + {10, &IHomeMenuFunctions::RequestToGetForeground, "RequestToGetForeground"}, + {11, nullptr, "LockForeground"}, + {12, nullptr, "UnlockForeground"}, + {20, nullptr, "PopFromGeneralChannel"}, + {21, &IHomeMenuFunctions::GetPopFromGeneralChannelEvent, "GetPopFromGeneralChannelEvent"}, + {30, nullptr, "GetHomeButtonWriterLockAccessor"}, + {31, nullptr, "GetWriterLockAccessorEx"}, + {40, nullptr, "IsSleepEnabled"}, + {41, nullptr, "IsRebootEnabled"}, + {50, nullptr, "LaunchSystemApplet"}, + {51, nullptr, "LaunchStarter"}, + {100, nullptr, "PopRequestLaunchApplicationForDebug"}, + {110, nullptr, "IsForceTerminateApplicationDisabledForDebug"}, + {200, nullptr, "LaunchDevMenu"}, + {1000, nullptr, "SetLastApplicationExitReason"}, + }; + // clang-format on + + RegisterHandlers(functions); + + pop_from_general_channel_event = + service_context.CreateEvent("IHomeMenuFunctions:PopFromGeneralChannelEvent"); +} + +IHomeMenuFunctions::~IHomeMenuFunctions() { + service_context.CloseEvent(pop_from_general_channel_event); +} + +void IHomeMenuFunctions::RequestToGetForeground(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IHomeMenuFunctions::GetPopFromGeneralChannelEvent(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(pop_from_general_channel_event->GetReadableEvent()); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/home_menu_functions.h b/src/core/hle/service/am/home_menu_functions.h new file mode 100644 index 000000000..e082d5d73 --- /dev/null +++ b/src/core/hle/service/am/home_menu_functions.h @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +namespace Service::AM { + +class IHomeMenuFunctions final : public ServiceFramework<IHomeMenuFunctions> { +public: + explicit IHomeMenuFunctions(Core::System& system_); + ~IHomeMenuFunctions() override; + +private: + void RequestToGetForeground(HLERequestContext& ctx); + void GetPopFromGeneralChannelEvent(HLERequestContext& ctx); + + KernelHelpers::ServiceContext service_context; + + Kernel::KEvent* pop_from_general_channel_event; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_accessor.cpp b/src/core/hle/service/am/library_applet_accessor.cpp new file mode 100644 index 000000000..6b20814f8 --- /dev/null +++ b/src/core/hle/service/am/library_applet_accessor.cpp @@ -0,0 +1,202 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/scope_exit.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/applet_data_broker.h" +#include "core/hle/service/am/frontend/applets.h" +#include "core/hle/service/am/library_applet_accessor.h" +#include "core/hle/service/am/storage.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +ILibraryAppletAccessor::ILibraryAppletAccessor(Core::System& system_, + std::shared_ptr<AppletDataBroker> broker_, + std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "ILibraryAppletAccessor"}, broker{std::move(broker_)}, + applet{std::move(applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &ILibraryAppletAccessor::GetAppletStateChangedEvent, "GetAppletStateChangedEvent"}, + {1, &ILibraryAppletAccessor::IsCompleted, "IsCompleted"}, + {10, &ILibraryAppletAccessor::Start, "Start"}, + {20, &ILibraryAppletAccessor::RequestExit, "RequestExit"}, + {25, nullptr, "Terminate"}, + {30, &ILibraryAppletAccessor::GetResult, "GetResult"}, + {50, nullptr, "SetOutOfFocusApplicationSuspendingEnabled"}, + {60, &ILibraryAppletAccessor::PresetLibraryAppletGpuTimeSliceZero, "PresetLibraryAppletGpuTimeSliceZero"}, + {100, &ILibraryAppletAccessor::PushInData, "PushInData"}, + {101, &ILibraryAppletAccessor::PopOutData, "PopOutData"}, + {102, nullptr, "PushExtraStorage"}, + {103, &ILibraryAppletAccessor::PushInteractiveInData, "PushInteractiveInData"}, + {104, &ILibraryAppletAccessor::PopInteractiveOutData, "PopInteractiveOutData"}, + {105, &ILibraryAppletAccessor::GetPopOutDataEvent, "GetPopOutDataEvent"}, + {106, &ILibraryAppletAccessor::GetPopInteractiveOutDataEvent, "GetPopInteractiveOutDataEvent"}, + {110, nullptr, "NeedsToExitProcess"}, + {120, nullptr, "GetLibraryAppletInfo"}, + {150, nullptr, "RequestForAppletToGetForeground"}, + {160, &ILibraryAppletAccessor::GetIndirectLayerConsumerHandle, "GetIndirectLayerConsumerHandle"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +ILibraryAppletAccessor::~ILibraryAppletAccessor() = default; + +void ILibraryAppletAccessor::GetAppletStateChangedEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(broker->GetStateChangedEvent().GetHandle()); +} + +void ILibraryAppletAccessor::IsCompleted(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + std::scoped_lock lk{applet->lock}; + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u32>(broker->IsCompleted()); +} + +void ILibraryAppletAccessor::GetResult(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(applet->terminate_result); +} + +void ILibraryAppletAccessor::PresetLibraryAppletGpuTimeSliceZero(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletAccessor::Start(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + applet->process->Run(); + FrontendExecute(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletAccessor::RequestExit(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + ASSERT(applet != nullptr); + applet->message_queue.RequestExit(); + FrontendRequestExit(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletAccessor::PushInData(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::RequestParser rp{ctx}; + broker->GetInData().Push(rp.PopIpcInterface<IStorage>().lock()); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletAccessor::PopOutData(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + std::shared_ptr<IStorage> data; + const auto res = broker->GetOutData().Pop(&data); + + if (res.IsSuccess()) { + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(res); + rb.PushIpcInterface(std::move(data)); + } else { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res); + } +} + +void ILibraryAppletAccessor::PushInteractiveInData(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::RequestParser rp{ctx}; + broker->GetInteractiveInData().Push(rp.PopIpcInterface<IStorage>().lock()); + FrontendExecuteInteractive(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletAccessor::PopInteractiveOutData(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + std::shared_ptr<IStorage> data; + const auto res = broker->GetInteractiveOutData().Pop(&data); + + if (res.IsSuccess()) { + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(res); + rb.PushIpcInterface(std::move(data)); + } else { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res); + } +} + +void ILibraryAppletAccessor::GetPopOutDataEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(broker->GetOutData().GetEvent()); +} + +void ILibraryAppletAccessor::GetPopInteractiveOutDataEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(broker->GetInteractiveOutData().GetEvent()); +} + +void ILibraryAppletAccessor::GetIndirectLayerConsumerHandle(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + // We require a non-zero handle to be valid. Using 0xdeadbeef allows us to trace if this is + // actually used anywhere + constexpr u64 handle = 0xdeadbeef; + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push(handle); +} + +void ILibraryAppletAccessor::FrontendExecute() { + if (applet->frontend) { + applet->frontend->Initialize(); + applet->frontend->Execute(); + } +} + +void ILibraryAppletAccessor::FrontendExecuteInteractive() { + if (applet->frontend) { + applet->frontend->ExecuteInteractive(); + applet->frontend->Execute(); + } +} + +void ILibraryAppletAccessor::FrontendRequestExit() { + if (applet->frontend) { + applet->frontend->RequestExit(); + } +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_accessor.h b/src/core/hle/service/am/library_applet_accessor.h new file mode 100644 index 000000000..8be29e003 --- /dev/null +++ b/src/core/hle/service/am/library_applet_accessor.h @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +class AppletDataBroker; +struct Applet; + +class ILibraryAppletAccessor final : public ServiceFramework<ILibraryAppletAccessor> { +public: + explicit ILibraryAppletAccessor(Core::System& system_, + std::shared_ptr<AppletDataBroker> broker_, + std::shared_ptr<Applet> applet_); + ~ILibraryAppletAccessor(); + +protected: + void GetAppletStateChangedEvent(HLERequestContext& ctx); + void IsCompleted(HLERequestContext& ctx); + void GetResult(HLERequestContext& ctx); + void PresetLibraryAppletGpuTimeSliceZero(HLERequestContext& ctx); + void Start(HLERequestContext& ctx); + void RequestExit(HLERequestContext& ctx); + void PushInData(HLERequestContext& ctx); + void PopOutData(HLERequestContext& ctx); + void PushInteractiveInData(HLERequestContext& ctx); + void PopInteractiveOutData(HLERequestContext& ctx); + void GetPopOutDataEvent(HLERequestContext& ctx); + void GetPopInteractiveOutDataEvent(HLERequestContext& ctx); + void GetIndirectLayerConsumerHandle(HLERequestContext& ctx); + + void FrontendExecute(); + void FrontendExecuteInteractive(); + void FrontendRequestExit(); + + const std::shared_ptr<AppletDataBroker> broker; + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_creator.cpp b/src/core/hle/service/am/library_applet_creator.cpp new file mode 100644 index 000000000..47bab7528 --- /dev/null +++ b/src/core/hle/service/am/library_applet_creator.cpp @@ -0,0 +1,271 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/kernel/k_transfer_memory.h" +#include "core/hle/service/am/applet_data_broker.h" +#include "core/hle/service/am/applet_manager.h" +#include "core/hle/service/am/frontend/applets.h" +#include "core/hle/service/am/library_applet_accessor.h" +#include "core/hle/service/am/library_applet_creator.h" +#include "core/hle/service/am/library_applet_storage.h" +#include "core/hle/service/am/storage.h" +#include "core/hle/service/ipc_helpers.h" +#include "core/hle/service/sm/sm.h" + +namespace Service::AM { + +namespace { + +AppletProgramId AppletIdToProgramId(AppletId applet_id) { + switch (applet_id) { + case AppletId::OverlayDisplay: + return AppletProgramId::OverlayDisplay; + case AppletId::QLaunch: + return AppletProgramId::QLaunch; + case AppletId::Starter: + return AppletProgramId::Starter; + case AppletId::Auth: + return AppletProgramId::Auth; + case AppletId::Cabinet: + return AppletProgramId::Cabinet; + case AppletId::Controller: + return AppletProgramId::Controller; + case AppletId::DataErase: + return AppletProgramId::DataErase; + case AppletId::Error: + return AppletProgramId::Error; + case AppletId::NetConnect: + return AppletProgramId::NetConnect; + case AppletId::ProfileSelect: + return AppletProgramId::ProfileSelect; + case AppletId::SoftwareKeyboard: + return AppletProgramId::SoftwareKeyboard; + case AppletId::MiiEdit: + return AppletProgramId::MiiEdit; + case AppletId::Web: + return AppletProgramId::Web; + case AppletId::Shop: + return AppletProgramId::Shop; + case AppletId::PhotoViewer: + return AppletProgramId::PhotoViewer; + case AppletId::Settings: + return AppletProgramId::Settings; + case AppletId::OfflineWeb: + return AppletProgramId::OfflineWeb; + case AppletId::LoginShare: + return AppletProgramId::LoginShare; + case AppletId::WebAuth: + return AppletProgramId::WebAuth; + case AppletId::MyPage: + return AppletProgramId::MyPage; + default: + return static_cast<AppletProgramId>(0); + } +} + +[[maybe_unused]] std::shared_ptr<ILibraryAppletAccessor> CreateGuestApplet( + Core::System& system, std::shared_ptr<Applet> caller_applet, AppletId applet_id, + LibraryAppletMode mode) { + const auto program_id = static_cast<u64>(AppletIdToProgramId(applet_id)); + if (program_id == 0) { + // Unknown applet + return {}; + } + + auto process = std::make_unique<Process>(system); + if (!process->Initialize(program_id)) { + // Couldn't initialize the guest process + return {}; + } + + const auto applet = std::make_shared<Applet>(system, std::move(process)); + applet->program_id = program_id; + applet->applet_id = applet_id; + applet->type = AppletType::LibraryApplet; + applet->library_applet_mode = mode; + + // Set focus state + switch (mode) { + case LibraryAppletMode::AllForeground: + case LibraryAppletMode::NoUI: + applet->focus_state = FocusState::InFocus; + applet->hid_registration.EnableAppletToGetInput(true); + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); + break; + case LibraryAppletMode::AllForegroundInitiallyHidden: + applet->system_buffer_manager.SetWindowVisibility(false); + applet->focus_state = FocusState::NotInFocus; + applet->hid_registration.EnableAppletToGetInput(false); + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); + break; + case LibraryAppletMode::Background: + case LibraryAppletMode::BackgroundIndirectDisplay: + default: + applet->focus_state = FocusState::Background; + applet->hid_registration.EnableAppletToGetInput(true); + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); + break; + } + + auto broker = std::make_shared<AppletDataBroker>(system); + applet->caller_applet = caller_applet; + applet->caller_applet_broker = broker; + + system.GetAppletManager().InsertApplet(applet); + + return std::make_shared<ILibraryAppletAccessor>(system, broker, applet); +} + +[[maybe_unused]] std::shared_ptr<ILibraryAppletAccessor> CreateFrontendApplet( + Core::System& system, std::shared_ptr<Applet> caller_applet, AppletId applet_id, + LibraryAppletMode mode) { + const auto program_id = static_cast<u64>(AppletIdToProgramId(applet_id)); + + auto process = std::make_unique<Process>(system); + auto applet = std::make_shared<Applet>(system, std::move(process)); + applet->program_id = program_id; + applet->applet_id = applet_id; + applet->type = AppletType::LibraryApplet; + applet->library_applet_mode = mode; + + auto storage = std::make_shared<AppletDataBroker>(system); + applet->caller_applet = caller_applet; + applet->caller_applet_broker = storage; + applet->frontend = system.GetFrontendAppletHolder().GetApplet(applet, applet_id, mode); + + return std::make_shared<ILibraryAppletAccessor>(system, storage, applet); +} + +} // namespace + +ILibraryAppletCreator::ILibraryAppletCreator(Core::System& system_, std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "ILibraryAppletCreator"}, applet{std::move(applet_)} { + static const FunctionInfo functions[] = { + {0, &ILibraryAppletCreator::CreateLibraryApplet, "CreateLibraryApplet"}, + {1, nullptr, "TerminateAllLibraryApplets"}, + {2, nullptr, "AreAnyLibraryAppletsLeft"}, + {10, &ILibraryAppletCreator::CreateStorage, "CreateStorage"}, + {11, &ILibraryAppletCreator::CreateTransferMemoryStorage, "CreateTransferMemoryStorage"}, + {12, &ILibraryAppletCreator::CreateHandleStorage, "CreateHandleStorage"}, + }; + RegisterHandlers(functions); +} + +ILibraryAppletCreator::~ILibraryAppletCreator() = default; + +void ILibraryAppletCreator::CreateLibraryApplet(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const auto applet_id = rp.PopRaw<AppletId>(); + const auto applet_mode = rp.PopRaw<LibraryAppletMode>(); + + LOG_DEBUG(Service_AM, "called with applet_id={:08X}, applet_mode={:08X}", applet_id, + applet_mode); + + auto library_applet = CreateFrontendApplet(system, applet, applet_id, applet_mode); + if (!library_applet) { + LOG_ERROR(Service_AM, "Applet doesn't exist! applet_id={}", applet_id); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); + return; + } + + // Applet is created, can now be launched. + applet->library_applet_launchable_event.Signal(); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ILibraryAppletAccessor>(library_applet); +} + +void ILibraryAppletCreator::CreateStorage(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const s64 size{rp.Pop<s64>()}; + + LOG_DEBUG(Service_AM, "called, size={}", size); + + if (size <= 0) { + LOG_ERROR(Service_AM, "size is less than or equal to 0"); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); + return; + } + + std::vector<u8> data(size); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IStorage>(system, AM::CreateStorage(std::move(data))); +} + +void ILibraryAppletCreator::CreateTransferMemoryStorage(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + struct Parameters { + bool is_writable; + s64 size; + }; + + const auto params{rp.PopRaw<Parameters>()}; + const auto handle{ctx.GetCopyHandle(0)}; + + LOG_DEBUG(Service_AM, "called, is_writable={}, size={}, handle={:08X}", params.is_writable, + params.size, handle); + + if (params.size <= 0) { + LOG_ERROR(Service_AM, "size is less than or equal to 0"); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); + return; + } + + auto transfer_mem = ctx.GetObjectFromHandle<Kernel::KTransferMemory>(handle); + + if (transfer_mem.IsNull()) { + LOG_ERROR(Service_AM, "transfer_mem is a nullptr for handle={:08X}", handle); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); + return; + } + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IStorage>( + system, AM::CreateTransferMemoryStorage(ctx.GetMemory(), transfer_mem.GetPointerUnsafe(), + params.is_writable, params.size)); +} + +void ILibraryAppletCreator::CreateHandleStorage(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const s64 size{rp.Pop<s64>()}; + const auto handle{ctx.GetCopyHandle(0)}; + + LOG_DEBUG(Service_AM, "called, size={}, handle={:08X}", size, handle); + + if (size <= 0) { + LOG_ERROR(Service_AM, "size is less than or equal to 0"); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); + return; + } + + auto transfer_mem = ctx.GetObjectFromHandle<Kernel::KTransferMemory>(handle); + + if (transfer_mem.IsNull()) { + LOG_ERROR(Service_AM, "transfer_mem is a nullptr for handle={:08X}", handle); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); + return; + } + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IStorage>( + system, AM::CreateHandleStorage(ctx.GetMemory(), transfer_mem.GetPointerUnsafe(), size)); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_creator.h b/src/core/hle/service/am/library_applet_creator.h new file mode 100644 index 000000000..551f287bd --- /dev/null +++ b/src/core/hle/service/am/library_applet_creator.h @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class ILibraryAppletCreator final : public ServiceFramework<ILibraryAppletCreator> { +public: + explicit ILibraryAppletCreator(Core::System& system_, std::shared_ptr<Applet> applet_); + ~ILibraryAppletCreator() override; + +private: + void CreateLibraryApplet(HLERequestContext& ctx); + void CreateStorage(HLERequestContext& ctx); + void CreateTransferMemoryStorage(HLERequestContext& ctx); + void CreateHandleStorage(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_proxy.cpp b/src/core/hle/service/am/library_applet_proxy.cpp new file mode 100644 index 000000000..d6108fba3 --- /dev/null +++ b/src/core/hle/service/am/library_applet_proxy.cpp @@ -0,0 +1,143 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/applet_common_functions.h" +#include "core/hle/service/am/audio_controller.h" +#include "core/hle/service/am/common_state_getter.h" +#include "core/hle/service/am/debug_functions.h" +#include "core/hle/service/am/display_controller.h" +#include "core/hle/service/am/global_state_controller.h" +#include "core/hle/service/am/home_menu_functions.h" +#include "core/hle/service/am/library_applet_creator.h" +#include "core/hle/service/am/library_applet_proxy.h" +#include "core/hle/service/am/library_applet_self_accessor.h" +#include "core/hle/service/am/process_winding_controller.h" +#include "core/hle/service/am/self_controller.h" +#include "core/hle/service/am/window_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +ILibraryAppletProxy::ILibraryAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, + std::shared_ptr<Applet> applet_, Core::System& system_) + : ServiceFramework{system_, "ILibraryAppletProxy"}, nvnflinger{nvnflinger_}, applet{std::move( + applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &ILibraryAppletProxy::GetCommonStateGetter, "GetCommonStateGetter"}, + {1, &ILibraryAppletProxy::GetSelfController, "GetSelfController"}, + {2, &ILibraryAppletProxy::GetWindowController, "GetWindowController"}, + {3, &ILibraryAppletProxy::GetAudioController, "GetAudioController"}, + {4, &ILibraryAppletProxy::GetDisplayController, "GetDisplayController"}, + {10, &ILibraryAppletProxy::GetProcessWindingController, "GetProcessWindingController"}, + {11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, + {20, &ILibraryAppletProxy::OpenLibraryAppletSelfAccessor, "OpenLibraryAppletSelfAccessor"}, + {21, &ILibraryAppletProxy::GetAppletCommonFunctions, "GetAppletCommonFunctions"}, + {22, &ILibraryAppletProxy::GetHomeMenuFunctions, "GetHomeMenuFunctions"}, + {23, &ILibraryAppletProxy::GetGlobalStateController, "GetGlobalStateController"}, + {1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +ILibraryAppletProxy::~ILibraryAppletProxy() = default; + +void ILibraryAppletProxy::GetCommonStateGetter(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ICommonStateGetter>(system, applet); +} + +void ILibraryAppletProxy::GetSelfController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ISelfController>(system, applet, nvnflinger); +} + +void ILibraryAppletProxy::GetWindowController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IWindowController>(system, applet); +} + +void ILibraryAppletProxy::GetAudioController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IAudioController>(system); +} + +void ILibraryAppletProxy::GetDisplayController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IDisplayController>(system, applet); +} + +void ILibraryAppletProxy::GetProcessWindingController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IProcessWindingController>(system, applet); +} + +void ILibraryAppletProxy::GetLibraryAppletCreator(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ILibraryAppletCreator>(system, applet); +} + +void ILibraryAppletProxy::OpenLibraryAppletSelfAccessor(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ILibraryAppletSelfAccessor>(system, applet); +} + +void ILibraryAppletProxy::GetAppletCommonFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IAppletCommonFunctions>(system, applet); +} + +void ILibraryAppletProxy::GetHomeMenuFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IHomeMenuFunctions>(system); +} + +void ILibraryAppletProxy::GetGlobalStateController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IGlobalStateController>(system); +} + +void ILibraryAppletProxy::GetDebugFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IDebugFunctions>(system); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_proxy.h b/src/core/hle/service/am/library_applet_proxy.h new file mode 100644 index 000000000..8f7a25897 --- /dev/null +++ b/src/core/hle/service/am/library_applet_proxy.h @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class ILibraryAppletProxy final : public ServiceFramework<ILibraryAppletProxy> { +public: + explicit ILibraryAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, + std::shared_ptr<Applet> applet_, Core::System& system_); + ~ILibraryAppletProxy(); + +private: + void GetCommonStateGetter(HLERequestContext& ctx); + void GetSelfController(HLERequestContext& ctx); + void GetWindowController(HLERequestContext& ctx); + void GetAudioController(HLERequestContext& ctx); + void GetDisplayController(HLERequestContext& ctx); + void GetProcessWindingController(HLERequestContext& ctx); + void GetLibraryAppletCreator(HLERequestContext& ctx); + void OpenLibraryAppletSelfAccessor(HLERequestContext& ctx); + void GetAppletCommonFunctions(HLERequestContext& ctx); + void GetHomeMenuFunctions(HLERequestContext& ctx); + void GetGlobalStateController(HLERequestContext& ctx); + void GetDebugFunctions(HLERequestContext& ctx); + + Nvnflinger::Nvnflinger& nvnflinger; + std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_self_accessor.cpp b/src/core/hle/service/am/library_applet_self_accessor.cpp new file mode 100644 index 000000000..b560f580b --- /dev/null +++ b/src/core/hle/service/am/library_applet_self_accessor.cpp @@ -0,0 +1,338 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/scope_exit.h" +#include "core/core_timing.h" +#include "core/file_sys/control_metadata.h" +#include "core/file_sys/patch_manager.h" +#include "core/file_sys/registered_cache.h" +#include "core/hle/service/acc/profile_manager.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/applet_data_broker.h" +#include "core/hle/service/am/applet_manager.h" +#include "core/hle/service/am/frontend/applet_cabinet.h" +#include "core/hle/service/am/frontend/applet_controller.h" +#include "core/hle/service/am/frontend/applet_mii_edit_types.h" +#include "core/hle/service/am/frontend/applet_software_keyboard_types.h" +#include "core/hle/service/am/frontend/applets.h" +#include "core/hle/service/am/library_applet_self_accessor.h" +#include "core/hle/service/am/storage.h" +#include "core/hle/service/ipc_helpers.h" +#include "core/hle/service/ns/ns.h" +#include "core/hle/service/sm/sm.h" +#include "hid_core/hid_types.h" + +namespace Service::AM { + +namespace { + +AppletIdentityInfo GetCallerIdentity(std::shared_ptr<Applet> applet) { + if (const auto caller_applet = applet->caller_applet.lock(); caller_applet) { + // TODO: is this actually the application ID? + return { + .applet_id = caller_applet->applet_id, + .application_id = caller_applet->program_id, + }; + } else { + return { + .applet_id = AppletId::QLaunch, + .application_id = 0x0100000000001000ull, + }; + } +} + +} // namespace + +ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_, + std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "ILibraryAppletSelfAccessor"}, applet{std::move(applet_)}, + broker{applet->caller_applet_broker} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &ILibraryAppletSelfAccessor::PopInData, "PopInData"}, + {1, &ILibraryAppletSelfAccessor::PushOutData, "PushOutData"}, + {2, &ILibraryAppletSelfAccessor::PopInteractiveInData, "PopInteractiveInData"}, + {3, &ILibraryAppletSelfAccessor::PushInteractiveOutData, "PushInteractiveOutData"}, + {5, &ILibraryAppletSelfAccessor::GetPopInDataEvent, "GetPopInDataEvent"}, + {6, &ILibraryAppletSelfAccessor::GetPopInteractiveInDataEvent, "GetPopInteractiveInDataEvent"}, + {10, &ILibraryAppletSelfAccessor::ExitProcessAndReturn, "ExitProcessAndReturn"}, + {11, &ILibraryAppletSelfAccessor::GetLibraryAppletInfo, "GetLibraryAppletInfo"}, + {12, &ILibraryAppletSelfAccessor::GetMainAppletIdentityInfo, "GetMainAppletIdentityInfo"}, + {13, &ILibraryAppletSelfAccessor::CanUseApplicationCore, "CanUseApplicationCore"}, + {14, &ILibraryAppletSelfAccessor::GetCallerAppletIdentityInfo, "GetCallerAppletIdentityInfo"}, + {15, nullptr, "GetMainAppletApplicationControlProperty"}, + {16, nullptr, "GetMainAppletStorageId"}, + {17, nullptr, "GetCallerAppletIdentityInfoStack"}, + {18, nullptr, "GetNextReturnDestinationAppletIdentityInfo"}, + {19, &ILibraryAppletSelfAccessor::GetDesirableKeyboardLayout, "GetDesirableKeyboardLayout"}, + {20, nullptr, "PopExtraStorage"}, + {25, nullptr, "GetPopExtraStorageEvent"}, + {30, nullptr, "UnpopInData"}, + {31, nullptr, "UnpopExtraStorage"}, + {40, nullptr, "GetIndirectLayerProducerHandle"}, + {50, nullptr, "ReportVisibleError"}, + {51, nullptr, "ReportVisibleErrorWithErrorContext"}, + {60, &ILibraryAppletSelfAccessor::GetMainAppletApplicationDesiredLanguage, "GetMainAppletApplicationDesiredLanguage"}, + {70, &ILibraryAppletSelfAccessor::GetCurrentApplicationId, "GetCurrentApplicationId"}, + {80, nullptr, "RequestExitToSelf"}, + {90, nullptr, "CreateApplicationAndPushAndRequestToLaunch"}, + {100, nullptr, "CreateGameMovieTrimmer"}, + {101, nullptr, "ReserveResourceForMovieOperation"}, + {102, nullptr, "UnreserveResourceForMovieOperation"}, + {110, &ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers, "GetMainAppletAvailableUsers"}, + {120, nullptr, "GetLaunchStorageInfoForDebug"}, + {130, nullptr, "GetGpuErrorDetectedSystemEvent"}, + {140, nullptr, "SetApplicationMemoryReservation"}, + {150, &ILibraryAppletSelfAccessor::ShouldSetGpuTimeSliceManually, "ShouldSetGpuTimeSliceManually"}, + {160, &ILibraryAppletSelfAccessor::Cmd160, "Cmd160"}, + }; + // clang-format on + RegisterHandlers(functions); +} + +ILibraryAppletSelfAccessor::~ILibraryAppletSelfAccessor() = default; + +void ILibraryAppletSelfAccessor::PopInData(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + std::shared_ptr<IStorage> data; + const auto res = broker->GetInData().Pop(&data); + + if (res.IsSuccess()) { + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(res); + rb.PushIpcInterface(std::move(data)); + } else { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res); + } +} + +void ILibraryAppletSelfAccessor::PushOutData(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + IPC::RequestParser rp{ctx}; + broker->GetOutData().Push(rp.PopIpcInterface<IStorage>().lock()); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletSelfAccessor::PopInteractiveInData(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + std::shared_ptr<IStorage> data; + const auto res = broker->GetInteractiveInData().Pop(&data); + + if (res.IsSuccess()) { + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(res); + rb.PushIpcInterface(std::move(data)); + } else { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res); + } +} + +void ILibraryAppletSelfAccessor::PushInteractiveOutData(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + IPC::RequestParser rp{ctx}; + broker->GetInteractiveOutData().Push(rp.PopIpcInterface<IStorage>().lock()); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletSelfAccessor::GetPopInDataEvent(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(broker->GetInData().GetEvent()); +} + +void ILibraryAppletSelfAccessor::GetPopInteractiveInDataEvent(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(broker->GetInteractiveInData().GetEvent()); +} + +void ILibraryAppletSelfAccessor::ExitProcessAndReturn(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + system.GetAppletManager().TerminateAndRemoveApplet(applet->aruid); + broker->SignalCompletion(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILibraryAppletSelfAccessor::GetLibraryAppletInfo(HLERequestContext& ctx) { + struct LibraryAppletInfo { + AppletId applet_id; + LibraryAppletMode library_applet_mode; + }; + + LOG_WARNING(Service_AM, "(STUBBED) called"); + + const LibraryAppletInfo applet_info{ + .applet_id = applet->applet_id, + .library_applet_mode = applet->library_applet_mode, + }; + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.PushRaw(applet_info); +} + +void ILibraryAppletSelfAccessor::GetMainAppletIdentityInfo(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + const AppletIdentityInfo applet_info{ + .applet_id = AppletId::QLaunch, + .application_id = 0x0100000000001000ull, + }; + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.PushRaw(applet_info); +} + +void ILibraryAppletSelfAccessor::CanUseApplicationCore(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + // TODO: This appears to read the NPDM from state and check the core mask of the applet. + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u8>(0); +} + +void ILibraryAppletSelfAccessor::GetCallerAppletIdentityInfo(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.PushRaw(GetCallerIdentity(applet)); +} + +void ILibraryAppletSelfAccessor::GetDesirableKeyboardLayout(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u32>(0); +} + +void ILibraryAppletSelfAccessor::GetMainAppletApplicationDesiredLanguage(HLERequestContext& ctx) { + // FIXME: this is copied from IApplicationFunctions::GetDesiredLanguage + auto identity = GetCallerIdentity(applet); + + // TODO(bunnei): This should be configurable + LOG_DEBUG(Service_AM, "called"); + + // Get supported languages from NACP, if possible + // Default to 0 (all languages supported) + u32 supported_languages = 0; + + const auto res = [this, identity] { + const FileSys::PatchManager pm{identity.application_id, system.GetFileSystemController(), + system.GetContentProvider()}; + auto metadata = pm.GetControlMetadata(); + if (metadata.first != nullptr) { + return metadata; + } + + const FileSys::PatchManager pm_update{FileSys::GetUpdateTitleID(identity.application_id), + system.GetFileSystemController(), + system.GetContentProvider()}; + return pm_update.GetControlMetadata(); + }(); + + if (res.first != nullptr) { + supported_languages = res.first->GetSupportedLanguages(); + } + + // Call IApplicationManagerInterface implementation. + auto& service_manager = system.ServiceManager(); + auto ns_am2 = service_manager.GetService<NS::NS>("ns:am2"); + auto app_man = ns_am2->GetApplicationManagerInterface(); + + // Get desired application language + u8 desired_language{}; + const auto res_lang = + app_man->GetApplicationDesiredLanguage(&desired_language, supported_languages); + if (res_lang != ResultSuccess) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res_lang); + return; + } + + // Convert to settings language code. + u64 language_code{}; + const auto res_code = + app_man->ConvertApplicationLanguageToLanguageCode(&language_code, desired_language); + if (res_code != ResultSuccess) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res_code); + return; + } + + LOG_DEBUG(Service_AM, "got desired_language={:016X}", language_code); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push(language_code); +} + +void ILibraryAppletSelfAccessor::GetCurrentApplicationId(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + u64 application_id = 0; + if (auto caller_applet = applet->caller_applet.lock(); caller_applet) { + application_id = caller_applet->program_id; + } + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push(application_id); +} + +void ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(HLERequestContext& ctx) { + const Service::Account::ProfileManager manager{}; + bool is_empty{true}; + s32 user_count{-1}; + + LOG_INFO(Service_AM, "called"); + + if (manager.GetUserCount() > 0) { + is_empty = false; + user_count = static_cast<s32>(manager.GetUserCount()); + ctx.WriteBuffer(manager.GetAllUsers()); + } + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push<u8>(is_empty); + rb.Push(user_count); +} + +void ILibraryAppletSelfAccessor::ShouldSetGpuTimeSliceManually(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u8>(0); +} + +void ILibraryAppletSelfAccessor::Cmd160(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push<u64>(0); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_self_accessor.h b/src/core/hle/service/am/library_applet_self_accessor.h new file mode 100644 index 000000000..8717a989a --- /dev/null +++ b/src/core/hle/service/am/library_applet_self_accessor.h @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <deque> +#include <vector> + +#include "core/hle/service/service.h" + +namespace Service::AM { + +class AppletDataBroker; +struct Applet; + +class ILibraryAppletSelfAccessor final : public ServiceFramework<ILibraryAppletSelfAccessor> { +public: + explicit ILibraryAppletSelfAccessor(Core::System& system_, std::shared_ptr<Applet> applet_); + ~ILibraryAppletSelfAccessor() override; + +private: + void PopInData(HLERequestContext& ctx); + void PushOutData(HLERequestContext& ctx); + void PopInteractiveInData(HLERequestContext& ctx); + void PushInteractiveOutData(HLERequestContext& ctx); + void GetPopInDataEvent(HLERequestContext& ctx); + void GetPopInteractiveInDataEvent(HLERequestContext& ctx); + void GetLibraryAppletInfo(HLERequestContext& ctx); + void GetMainAppletIdentityInfo(HLERequestContext& ctx); + void CanUseApplicationCore(HLERequestContext& ctx); + void ExitProcessAndReturn(HLERequestContext& ctx); + void GetCallerAppletIdentityInfo(HLERequestContext& ctx); + void GetDesirableKeyboardLayout(HLERequestContext& ctx); + void GetMainAppletApplicationDesiredLanguage(HLERequestContext& ctx); + void GetCurrentApplicationId(HLERequestContext& ctx); + void GetMainAppletAvailableUsers(HLERequestContext& ctx); + void ShouldSetGpuTimeSliceManually(HLERequestContext& ctx); + void Cmd160(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; + const std::shared_ptr<AppletDataBroker> broker; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_storage.cpp b/src/core/hle/service/am/library_applet_storage.cpp new file mode 100644 index 000000000..46e6c0111 --- /dev/null +++ b/src/core/hle/service/am/library_applet_storage.cpp @@ -0,0 +1,140 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/kernel/k_transfer_memory.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/library_applet_storage.h" +#include "core/memory.h" + +namespace Service::AM { + +namespace { + +Result ValidateOffset(s64 offset, size_t size, size_t data_size) { + R_UNLESS(offset >= 0, AM::ResultInvalidOffset); + + const size_t begin = offset; + const size_t end = begin + size; + + R_UNLESS(begin <= end && end <= data_size, AM::ResultInvalidOffset); + R_SUCCEED(); +} + +class BufferLibraryAppletStorage final : public LibraryAppletStorage { +public: + explicit BufferLibraryAppletStorage(std::vector<u8>&& data) : m_data(std::move(data)) {} + ~BufferLibraryAppletStorage() = default; + + Result Read(s64 offset, void* buffer, size_t size) override { + R_TRY(ValidateOffset(offset, size, m_data.size())); + + std::memcpy(buffer, m_data.data() + offset, size); + + R_SUCCEED(); + } + + Result Write(s64 offset, const void* buffer, size_t size) override { + R_TRY(ValidateOffset(offset, size, m_data.size())); + + std::memcpy(m_data.data() + offset, buffer, size); + + R_SUCCEED(); + } + + s64 GetSize() override { + return m_data.size(); + } + + Kernel::KTransferMemory* GetHandle() override { + return nullptr; + } + +private: + std::vector<u8> m_data; +}; + +class TransferMemoryLibraryAppletStorage : public LibraryAppletStorage { +public: + explicit TransferMemoryLibraryAppletStorage(Core::Memory::Memory& memory, + Kernel::KTransferMemory* trmem, bool is_writable, + s64 size) + : m_memory(memory), m_trmem(trmem), m_is_writable(is_writable), m_size(size) { + m_trmem->Open(); + } + + ~TransferMemoryLibraryAppletStorage() { + m_trmem->Close(); + m_trmem = nullptr; + } + + Result Read(s64 offset, void* buffer, size_t size) override { + R_TRY(ValidateOffset(offset, size, m_size)); + + m_memory.ReadBlock(m_trmem->GetSourceAddress(), buffer, size); + + R_SUCCEED(); + } + + Result Write(s64 offset, const void* buffer, size_t size) override { + R_UNLESS(m_is_writable, ResultUnknown); + R_TRY(ValidateOffset(offset, size, m_size)); + + m_memory.WriteBlock(m_trmem->GetSourceAddress(), buffer, size); + + R_SUCCEED(); + } + + s64 GetSize() override { + return m_size; + } + + Kernel::KTransferMemory* GetHandle() override { + return nullptr; + } + +protected: + Core::Memory::Memory& m_memory; + Kernel::KTransferMemory* m_trmem; + bool m_is_writable; + s64 m_size; +}; + +class HandleLibraryAppletStorage : public TransferMemoryLibraryAppletStorage { +public: + explicit HandleLibraryAppletStorage(Core::Memory::Memory& memory, + Kernel::KTransferMemory* trmem, s64 size) + : TransferMemoryLibraryAppletStorage(memory, trmem, true, size) {} + ~HandleLibraryAppletStorage() = default; + + Kernel::KTransferMemory* GetHandle() override { + return m_trmem; + } +}; + +} // namespace + +LibraryAppletStorage::~LibraryAppletStorage() = default; + +std::vector<u8> LibraryAppletStorage::GetData() { + std::vector<u8> data(this->GetSize()); + this->Read(0, data.data(), data.size()); + return data; +} + +std::shared_ptr<LibraryAppletStorage> CreateStorage(std::vector<u8>&& data) { + return std::make_shared<BufferLibraryAppletStorage>(std::move(data)); +} + +std::shared_ptr<LibraryAppletStorage> CreateTransferMemoryStorage(Core::Memory::Memory& memory, + Kernel::KTransferMemory* trmem, + bool is_writable, s64 size) { + return std::make_shared<TransferMemoryLibraryAppletStorage>(memory, trmem, is_writable, size); +} + +std::shared_ptr<LibraryAppletStorage> CreateHandleStorage(Core::Memory::Memory& memory, + Kernel::KTransferMemory* trmem, + s64 size) { + return std::make_shared<HandleLibraryAppletStorage>(memory, trmem, size); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/library_applet_storage.h b/src/core/hle/service/am/library_applet_storage.h new file mode 100644 index 000000000..7f53f3a9c --- /dev/null +++ b/src/core/hle/service/am/library_applet_storage.h @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Core::Memory { +class Memory; +} + +namespace Kernel { +class KTransferMemory; +} + +namespace Service::AM { + +class LibraryAppletStorage { +public: + virtual ~LibraryAppletStorage(); + virtual Result Read(s64 offset, void* buffer, size_t size) = 0; + virtual Result Write(s64 offset, const void* buffer, size_t size) = 0; + virtual s64 GetSize() = 0; + virtual Kernel::KTransferMemory* GetHandle() = 0; + + std::vector<u8> GetData(); +}; + +std::shared_ptr<LibraryAppletStorage> CreateStorage(std::vector<u8>&& data); +std::shared_ptr<LibraryAppletStorage> CreateTransferMemoryStorage(Core::Memory::Memory& memory, + Kernel::KTransferMemory* trmem, + bool is_writable, s64 size); +std::shared_ptr<LibraryAppletStorage> CreateHandleStorage(Core::Memory::Memory& memory, + Kernel::KTransferMemory* trmem, s64 size); + +} // namespace Service::AM diff --git a/src/core/hle/service/am/lock_accessor.cpp b/src/core/hle/service/am/lock_accessor.cpp new file mode 100644 index 000000000..d0bd8d95e --- /dev/null +++ b/src/core/hle/service/am/lock_accessor.cpp @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/lock_accessor.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +ILockAccessor::ILockAccessor(Core::System& system_) + : ServiceFramework{system_, "ILockAccessor"}, service_context{system_, "ILockAccessor"} { + // clang-format off + static const FunctionInfo functions[] = { + {1, &ILockAccessor::TryLock, "TryLock"}, + {2, &ILockAccessor::Unlock, "Unlock"}, + {3, &ILockAccessor::GetEvent, "GetEvent"}, + {4,&ILockAccessor::IsLocked, "IsLocked"}, + }; + // clang-format on + + RegisterHandlers(functions); + + lock_event = service_context.CreateEvent("ILockAccessor::LockEvent"); +} + +ILockAccessor::~ILockAccessor() { + service_context.CloseEvent(lock_event); +}; + +void ILockAccessor::TryLock(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto return_handle = rp.Pop<bool>(); + + LOG_WARNING(Service_AM, "(STUBBED) called, return_handle={}", return_handle); + + // TODO: When return_handle is true this function should return the lock handle + + is_locked = true; + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u8>(is_locked); +} + +void ILockAccessor::Unlock(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + is_locked = false; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ILockAccessor::GetEvent(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + lock_event->Signal(); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(lock_event->GetReadableEvent()); +} + +void ILockAccessor::IsLocked(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + rb.Push<u8>(is_locked); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/lock_accessor.h b/src/core/hle/service/am/lock_accessor.h new file mode 100644 index 000000000..626f60e07 --- /dev/null +++ b/src/core/hle/service/am/lock_accessor.h @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +namespace Service::AM { + +class ILockAccessor final : public ServiceFramework<ILockAccessor> { +public: + explicit ILockAccessor(Core::System& system_); + ~ILockAccessor() override; + +private: + void TryLock(HLERequestContext& ctx); + void Unlock(HLERequestContext& ctx); + void GetEvent(HLERequestContext& ctx); + void IsLocked(HLERequestContext& ctx); + + bool is_locked{}; + + Kernel::KEvent* lock_event; + KernelHelpers::ServiceContext service_context; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/managed_layer_holder.cpp b/src/core/hle/service/am/managed_layer_holder.cpp new file mode 100644 index 000000000..61eb8641a --- /dev/null +++ b/src/core/hle/service/am/managed_layer_holder.cpp @@ -0,0 +1,59 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/managed_layer_holder.h" +#include "core/hle/service/nvnflinger/nvnflinger.h" + +namespace Service::AM { + +ManagedLayerHolder::ManagedLayerHolder() = default; +ManagedLayerHolder::~ManagedLayerHolder() { + if (!m_nvnflinger) { + return; + } + + for (const auto& layer : m_managed_display_layers) { + m_nvnflinger->DestroyLayer(layer); + } + + for (const auto& layer : m_managed_display_recording_layers) { + m_nvnflinger->DestroyLayer(layer); + } + + m_nvnflinger = nullptr; +} + +void ManagedLayerHolder::Initialize(Nvnflinger::Nvnflinger* nvnflinger) { + m_nvnflinger = nvnflinger; +} + +void ManagedLayerHolder::CreateManagedDisplayLayer(u64* out_layer) { + // TODO(Subv): Find out how AM determines the display to use, for now just + // create the layer in the Default display. + const auto display_id = m_nvnflinger->OpenDisplay("Default"); + const auto layer_id = m_nvnflinger->CreateLayer(*display_id); + + m_managed_display_layers.emplace(*layer_id); + + *out_layer = *layer_id; +} + +void ManagedLayerHolder::CreateManagedDisplaySeparableLayer(u64* out_layer, + u64* out_recording_layer) { + // TODO(Subv): Find out how AM determines the display to use, for now just + // create the layer in the Default display. + // This calls nn::vi::CreateRecordingLayer() which creates another layer. + // Currently we do not support more than 1 layer per display, output 1 layer id for now. + // Outputting 1 layer id instead of the expected 2 has not been observed to cause any adverse + // side effects. + // TODO: Support multiple layers + const auto display_id = m_nvnflinger->OpenDisplay("Default"); + const auto layer_id = m_nvnflinger->CreateLayer(*display_id); + + m_managed_display_layers.emplace(*layer_id); + + *out_layer = *layer_id; + *out_recording_layer = 0; +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/managed_layer_holder.h b/src/core/hle/service/am/managed_layer_holder.h new file mode 100644 index 000000000..f7fe03f24 --- /dev/null +++ b/src/core/hle/service/am/managed_layer_holder.h @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <set> + +#include "common/common_funcs.h" +#include "common/common_types.h" + +namespace Service::Nvnflinger { +class Nvnflinger; +} + +namespace Service::AM { + +class ManagedLayerHolder { +public: + ManagedLayerHolder(); + ~ManagedLayerHolder(); + + void Initialize(Nvnflinger::Nvnflinger* nvnflinger); + void CreateManagedDisplayLayer(u64* out_layer); + void CreateManagedDisplaySeparableLayer(u64* out_layer, u64* out_recording_layer); + +private: + Nvnflinger::Nvnflinger* m_nvnflinger{}; + std::set<u64> m_managed_display_layers{}; + std::set<u64> m_managed_display_recording_layers{}; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/process.cpp b/src/core/hle/service/am/process.cpp new file mode 100644 index 000000000..16b685f86 --- /dev/null +++ b/src/core/hle/service/am/process.cpp @@ -0,0 +1,138 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/scope_exit.h" + +#include "core/file_sys/nca_metadata.h" +#include "core/file_sys/registered_cache.h" +#include "core/hle/kernel/k_process.h" +#include "core/hle/service/am/process.h" +#include "core/hle/service/filesystem/filesystem.h" +#include "core/loader/loader.h" + +namespace Service::AM { + +Process::Process(Core::System& system) + : m_system(system), m_process(), m_main_thread_priority(), m_main_thread_stack_size(), + m_program_id(), m_process_started() {} + +Process::~Process() { + this->Finalize(); +} + +bool Process::Initialize(u64 program_id) { + // First, ensure we are not holding another process. + this->Finalize(); + + // Get the filesystem controller. + auto& fsc = m_system.GetFileSystemController(); + + // Attempt to load program NCA. + const FileSys::RegisteredCache* bis_system{}; + FileSys::VirtualFile nca{}; + + // Get the program NCA from built-in storage. + bis_system = fsc.GetSystemNANDContents(); + if (bis_system) { + nca = bis_system->GetEntryRaw(program_id, FileSys::ContentRecordType::Program); + } + + // Ensure we retrieved a program NCA. + if (!nca) { + return false; + } + + // Get the appropriate loader to parse this NCA. + auto app_loader = Loader::GetLoader(m_system, nca, program_id, 0); + + // Ensure we have a loader which can parse the NCA. + if (!app_loader) { + return false; + } + + // Create the process. + auto* const process = Kernel::KProcess::Create(m_system.Kernel()); + Kernel::KProcess::Register(m_system.Kernel(), process); + + // On exit, ensure we free the additional reference to the process. + SCOPE_EXIT({ process->Close(); }); + + // Insert process modules into memory. + const auto [load_result, load_parameters] = app_loader->Load(*process, m_system); + + // Ensure loading was successful. + if (load_result != Loader::ResultStatus::Success) { + return false; + } + + // TODO: remove this, kernel already tracks this + m_system.Kernel().AppendNewProcess(process); + + // Note the load parameters from NPDM. + m_main_thread_priority = load_parameters->main_thread_priority; + m_main_thread_stack_size = load_parameters->main_thread_stack_size; + + // This process has not started yet. + m_process_started = false; + + // Take ownership of the process object. + m_process = process; + m_process->Open(); + + // We succeeded. + return true; +} + +void Process::Finalize() { + // Terminate, if we are currently holding a process. + this->Terminate(); + + // Close the process. + if (m_process) { + m_process->Close(); + + // TODO: remove this, kernel already tracks this + m_system.Kernel().RemoveProcess(m_process); + } + + // Clean up. + m_process = nullptr; + m_main_thread_priority = 0; + m_main_thread_stack_size = 0; + m_program_id = 0; + m_process_started = false; +} + +bool Process::Run() { + // If we already started the process, don't start again. + if (m_process_started) { + return false; + } + + // Start. + if (m_process) { + m_process->Run(m_main_thread_priority, m_main_thread_stack_size); + } + + // Mark as started. + m_process_started = true; + + // We succeeded. + return true; +} + +void Process::Terminate() { + if (m_process) { + m_process->Terminate(); + } +} + +u64 Process::GetProcessId() const { + if (m_process) { + return m_process->GetProcessId(); + } + + return 0; +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/process.h b/src/core/hle/service/am/process.h new file mode 100644 index 000000000..4b908ade4 --- /dev/null +++ b/src/core/hle/service/am/process.h @@ -0,0 +1,50 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/common_funcs.h" +#include "common/common_types.h" + +namespace Kernel { +class KProcess; +} + +namespace Core { +class System; +} + +namespace Service::AM { + +class Process { +public: + explicit Process(Core::System& system); + ~Process(); + + bool Initialize(u64 program_id); + void Finalize(); + + bool Run(); + void Terminate(); + + bool IsInitialized() const { + return m_process != nullptr; + } + u64 GetProcessId() const; + u64 GetProgramId() const { + return m_program_id; + } + Kernel::KProcess* GetProcess() const { + return m_process; + } + +private: + Core::System& m_system; + Kernel::KProcess* m_process{}; + s32 m_main_thread_priority{}; + u64 m_main_thread_stack_size{}; + u64 m_program_id{}; + bool m_process_started{}; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/process_winding_controller.cpp b/src/core/hle/service/am/process_winding_controller.cpp new file mode 100644 index 000000000..b48b52797 --- /dev/null +++ b/src/core/hle/service/am/process_winding_controller.cpp @@ -0,0 +1,56 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/frontend/applets.h" +#include "core/hle/service/am/library_applet_accessor.h" +#include "core/hle/service/am/process_winding_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IProcessWindingController::IProcessWindingController(Core::System& system_, + std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "IProcessWindingController"}, applet{std::move(applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &IProcessWindingController::GetLaunchReason, "GetLaunchReason"}, + {11, &IProcessWindingController::OpenCallingLibraryApplet, "OpenCallingLibraryApplet"}, + {21, nullptr, "PushContext"}, + {22, nullptr, "PopContext"}, + {23, nullptr, "CancelWindingReservation"}, + {30, nullptr, "WindAndDoReserved"}, + {40, nullptr, "ReserveToStartAndWaitAndUnwindThis"}, + {41, nullptr, "ReserveToStartAndWait"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IProcessWindingController::~IProcessWindingController() = default; + +void IProcessWindingController::GetLaunchReason(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.PushRaw(applet->launch_reason); +} + +void IProcessWindingController::OpenCallingLibraryApplet(HLERequestContext& ctx) { + const auto caller_applet = applet->caller_applet.lock(); + if (caller_applet == nullptr) { + LOG_ERROR(Service_AM, "No calling applet available"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultUnknown); + return; + } + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ILibraryAppletAccessor>(system, applet->caller_applet_broker, + caller_applet); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/process_winding_controller.h b/src/core/hle/service/am/process_winding_controller.h new file mode 100644 index 000000000..71ae4c4f5 --- /dev/null +++ b/src/core/hle/service/am/process_winding_controller.h @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class IProcessWindingController final : public ServiceFramework<IProcessWindingController> { +public: + explicit IProcessWindingController(Core::System& system_, std::shared_ptr<Applet> applet_); + ~IProcessWindingController() override; + +private: + void GetLaunchReason(HLERequestContext& ctx); + void OpenCallingLibraryApplet(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/self_controller.cpp b/src/core/hle/service/am/self_controller.cpp new file mode 100644 index 000000000..0289f5cf1 --- /dev/null +++ b/src/core/hle/service/am/self_controller.cpp @@ -0,0 +1,456 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/frontend/applets.h" +#include "core/hle/service/am/self_controller.h" +#include "core/hle/service/caps/caps_su.h" +#include "core/hle/service/ipc_helpers.h" +#include "core/hle/service/nvnflinger/fb_share_buffer_manager.h" +#include "core/hle/service/nvnflinger/nvnflinger.h" +#include "core/hle/service/sm/sm.h" +#include "core/hle/service/vi/vi_results.h" + +namespace Service::AM { + +ISelfController::ISelfController(Core::System& system_, std::shared_ptr<Applet> applet_, + Nvnflinger::Nvnflinger& nvnflinger_) + : ServiceFramework{system_, "ISelfController"}, nvnflinger{nvnflinger_}, applet{std::move( + applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &ISelfController::Exit, "Exit"}, + {1, &ISelfController::LockExit, "LockExit"}, + {2, &ISelfController::UnlockExit, "UnlockExit"}, + {3, &ISelfController::EnterFatalSection, "EnterFatalSection"}, + {4, &ISelfController::LeaveFatalSection, "LeaveFatalSection"}, + {9, &ISelfController::GetLibraryAppletLaunchableEvent, "GetLibraryAppletLaunchableEvent"}, + {10, &ISelfController::SetScreenShotPermission, "SetScreenShotPermission"}, + {11, &ISelfController::SetOperationModeChangedNotification, "SetOperationModeChangedNotification"}, + {12, &ISelfController::SetPerformanceModeChangedNotification, "SetPerformanceModeChangedNotification"}, + {13, &ISelfController::SetFocusHandlingMode, "SetFocusHandlingMode"}, + {14, &ISelfController::SetRestartMessageEnabled, "SetRestartMessageEnabled"}, + {15, &ISelfController::SetScreenShotAppletIdentityInfo, "SetScreenShotAppletIdentityInfo"}, + {16, &ISelfController::SetOutOfFocusSuspendingEnabled, "SetOutOfFocusSuspendingEnabled"}, + {17, nullptr, "SetControllerFirmwareUpdateSection"}, + {18, nullptr, "SetRequiresCaptureButtonShortPressedMessage"}, + {19, &ISelfController::SetAlbumImageOrientation, "SetAlbumImageOrientation"}, + {20, nullptr, "SetDesirableKeyboardLayout"}, + {21, nullptr, "GetScreenShotProgramId"}, + {40, &ISelfController::CreateManagedDisplayLayer, "CreateManagedDisplayLayer"}, + {41, &ISelfController::IsSystemBufferSharingEnabled, "IsSystemBufferSharingEnabled"}, + {42, &ISelfController::GetSystemSharedLayerHandle, "GetSystemSharedLayerHandle"}, + {43, &ISelfController::GetSystemSharedBufferHandle, "GetSystemSharedBufferHandle"}, + {44, &ISelfController::CreateManagedDisplaySeparableLayer, "CreateManagedDisplaySeparableLayer"}, + {45, nullptr, "SetManagedDisplayLayerSeparationMode"}, + {46, nullptr, "SetRecordingLayerCompositionEnabled"}, + {50, &ISelfController::SetHandlesRequestToDisplay, "SetHandlesRequestToDisplay"}, + {51, &ISelfController::ApproveToDisplay, "ApproveToDisplay"}, + {60, nullptr, "OverrideAutoSleepTimeAndDimmingTime"}, + {61, nullptr, "SetMediaPlaybackState"}, + {62, &ISelfController::SetIdleTimeDetectionExtension, "SetIdleTimeDetectionExtension"}, + {63, &ISelfController::GetIdleTimeDetectionExtension, "GetIdleTimeDetectionExtension"}, + {64, nullptr, "SetInputDetectionSourceSet"}, + {65, &ISelfController::ReportUserIsActive, "ReportUserIsActive"}, + {66, nullptr, "GetCurrentIlluminance"}, + {67, nullptr, "IsIlluminanceAvailable"}, + {68, &ISelfController::SetAutoSleepDisabled, "SetAutoSleepDisabled"}, + {69, &ISelfController::IsAutoSleepDisabled, "IsAutoSleepDisabled"}, + {70, nullptr, "ReportMultimediaError"}, + {71, nullptr, "GetCurrentIlluminanceEx"}, + {72, nullptr, "SetInputDetectionPolicy"}, + {80, nullptr, "SetWirelessPriorityMode"}, + {90, &ISelfController::GetAccumulatedSuspendedTickValue, "GetAccumulatedSuspendedTickValue"}, + {91, &ISelfController::GetAccumulatedSuspendedTickChangedEvent, "GetAccumulatedSuspendedTickChangedEvent"}, + {100, &ISelfController::SetAlbumImageTakenNotificationEnabled, "SetAlbumImageTakenNotificationEnabled"}, + {110, nullptr, "SetApplicationAlbumUserData"}, + {120, &ISelfController::SaveCurrentScreenshot, "SaveCurrentScreenshot"}, + {130, &ISelfController::SetRecordVolumeMuted, "SetRecordVolumeMuted"}, + {1000, nullptr, "GetDebugStorageChannel"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +ISelfController::~ISelfController() = default; + +void ISelfController::Exit(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + + // TODO + system.Exit(); +} + +void ISelfController::LockExit(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + system.SetExitLocked(true); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::UnlockExit(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + system.SetExitLocked(false); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + + if (system.GetExitRequested()) { + system.Exit(); + } +} + +void ISelfController::EnterFatalSection(HLERequestContext& ctx) { + + std::scoped_lock lk{applet->lock}; + applet->fatal_section_count++; + LOG_DEBUG(Service_AM, "called. Num fatal sections entered: {}", applet->fatal_section_count); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::LeaveFatalSection(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called."); + + // Entry and exit of fatal sections must be balanced. + std::scoped_lock lk{applet->lock}; + if (applet->fatal_section_count == 0) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(AM::ResultFatalSectionCountImbalance); + return; + } + + applet->fatal_section_count--; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::GetLibraryAppletLaunchableEvent(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + applet->library_applet_launchable_event.Signal(); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->library_applet_launchable_event.GetHandle()); +} + +void ISelfController::SetScreenShotPermission(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto permission = rp.PopEnum<ScreenshotPermission>(); + LOG_DEBUG(Service_AM, "called, permission={}", permission); + + std::scoped_lock lk{applet->lock}; + applet->screenshot_permission = permission; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetOperationModeChangedNotification(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const bool notification_enabled = rp.Pop<bool>(); + LOG_WARNING(Service_AM, "(STUBBED) called notification_enabled={}", notification_enabled); + + std::scoped_lock lk{applet->lock}; + applet->operation_mode_changed_notification_enabled = notification_enabled; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetPerformanceModeChangedNotification(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const bool notification_enabled = rp.Pop<bool>(); + LOG_WARNING(Service_AM, "(STUBBED) called notification_enabled={}", notification_enabled); + + std::scoped_lock lk{applet->lock}; + applet->performance_mode_changed_notification_enabled = notification_enabled; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetFocusHandlingMode(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const auto flags = rp.PopRaw<FocusHandlingMode>(); + + LOG_WARNING(Service_AM, "(STUBBED) called. unknown0={}, unknown1={}, unknown2={}", + flags.unknown0, flags.unknown1, flags.unknown2); + + std::scoped_lock lk{applet->lock}; + applet->focus_handling_mode = flags; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetRestartMessageEnabled(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + applet->restart_message_enabled = true; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetScreenShotAppletIdentityInfo(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::RequestParser rp{ctx}; + std::scoped_lock lk{applet->lock}; + applet->screen_shot_identity = rp.PopRaw<AppletIdentityInfo>(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetOutOfFocusSuspendingEnabled(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const bool enabled = rp.Pop<bool>(); + LOG_WARNING(Service_AM, "(STUBBED) called enabled={}", enabled); + + std::scoped_lock lk{applet->lock}; + ASSERT(applet->type == AppletType::Application); + applet->out_of_focus_suspension_enabled = enabled; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetAlbumImageOrientation(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const auto orientation = rp.PopRaw<Capture::AlbumImageOrientation>(); + LOG_WARNING(Service_AM, "(STUBBED) called, orientation={}", static_cast<s32>(orientation)); + + std::scoped_lock lk{applet->lock}; + applet->album_image_orientation = orientation; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::CreateManagedDisplayLayer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + u64 layer_id{}; + applet->managed_layer_holder.Initialize(&nvnflinger); + applet->managed_layer_holder.CreateManagedDisplayLayer(&layer_id); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push(layer_id); +} + +void ISelfController::IsSystemBufferSharingEnabled(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(this->EnsureBufferSharingEnabled(ctx.GetThread().GetOwnerProcess())); +} + +void ISelfController::GetSystemSharedLayerHandle(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + u64 buffer_id, layer_id; + applet->system_buffer_manager.GetSystemSharedLayerHandle(&buffer_id, &layer_id); + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(this->EnsureBufferSharingEnabled(ctx.GetThread().GetOwnerProcess())); + rb.Push<s64>(buffer_id); + rb.Push<s64>(layer_id); +} + +void ISelfController::GetSystemSharedBufferHandle(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + u64 buffer_id, layer_id; + applet->system_buffer_manager.GetSystemSharedLayerHandle(&buffer_id, &layer_id); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(this->EnsureBufferSharingEnabled(ctx.GetThread().GetOwnerProcess())); + rb.Push<s64>(buffer_id); +} + +Result ISelfController::EnsureBufferSharingEnabled(Kernel::KProcess* process) { + if (applet->system_buffer_manager.Initialize(&nvnflinger, process, applet->applet_id)) { + return ResultSuccess; + } + + return VI::ResultOperationFailed; +} + +void ISelfController::CreateManagedDisplaySeparableLayer(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + u64 layer_id{}; + u64 recording_layer_id{}; + applet->managed_layer_holder.Initialize(&nvnflinger); + applet->managed_layer_holder.CreateManagedDisplaySeparableLayer(&layer_id, &recording_layer_id); + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.Push(layer_id); + rb.Push(recording_layer_id); +} + +void ISelfController::SetHandlesRequestToDisplay(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::ApproveToDisplay(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetIdleTimeDetectionExtension(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const auto extension = rp.PopRaw<IdleTimeDetectionExtension>(); + LOG_DEBUG(Service_AM, "(STUBBED) called extension={}", extension); + + std::scoped_lock lk{applet->lock}; + applet->idle_time_detection_extension = extension; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::GetIdleTimeDetectionExtension(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + std::scoped_lock lk{applet->lock}; + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.PushRaw<IdleTimeDetectionExtension>(applet->idle_time_detection_extension); +} + +void ISelfController::ReportUserIsActive(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetAutoSleepDisabled(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + std::scoped_lock lk{applet->lock}; + applet->auto_sleep_disabled = rp.Pop<bool>(); + + // On the system itself, if the previous state of is_auto_sleep_disabled + // differed from the current value passed in, it'd signify the internal + // window manager to update (and also increment some statistics like update counts) + // + // It'd also indicate this change to an idle handling context. + // + // However, given we're emulating this behavior, most of this can be ignored + // and it's sufficient to simply set the member variable for querying via + // IsAutoSleepDisabled(). + + LOG_DEBUG(Service_AM, "called. is_auto_sleep_disabled={}", applet->auto_sleep_disabled); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::IsAutoSleepDisabled(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called."); + + std::scoped_lock lk{applet->lock}; + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(applet->auto_sleep_disabled); +} + +void ISelfController::GetAccumulatedSuspendedTickValue(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called."); + + std::scoped_lock lk{applet->lock}; + // This command returns the total number of system ticks since ISelfController creation + // where the game was suspended. Since Yuzu doesn't implement game suspension, this command + // can just always return 0 ticks. + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push<u64>(applet->suspended_ticks); +} + +void ISelfController::GetAccumulatedSuspendedTickChangedEvent(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called."); + + IPC::ResponseBuilder rb{ctx, 2, 1}; + rb.Push(ResultSuccess); + rb.PushCopyObjects(applet->accumulated_suspended_tick_changed_event.GetHandle()); +} + +void ISelfController::SetAlbumImageTakenNotificationEnabled(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + // This service call sets an internal flag whether a notification is shown when an image is + // captured. Currently we do not support capturing images via the capture button, so this can be + // stubbed for now. + const bool enabled = rp.Pop<bool>(); + LOG_WARNING(Service_AM, "(STUBBED) called. enabled={}", enabled); + + std::scoped_lock lk{applet->lock}; + applet->album_image_taken_notification_enabled = enabled; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SaveCurrentScreenshot(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const auto report_option = rp.PopEnum<Capture::AlbumReportOption>(); + + LOG_INFO(Service_AM, "called, report_option={}", report_option); + + const auto screenshot_service = + system.ServiceManager().GetService<Service::Capture::IScreenShotApplicationService>( + "caps:su"); + + if (screenshot_service) { + screenshot_service->CaptureAndSaveScreenshot(report_option); + } + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void ISelfController::SetRecordVolumeMuted(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const auto enabled = rp.Pop<bool>(); + LOG_WARNING(Service_AM, "(STUBBED) called. enabled={}", enabled); + + std::scoped_lock lk{applet->lock}; + applet->record_volume_muted = enabled; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/self_controller.h b/src/core/hle/service/am/self_controller.h new file mode 100644 index 000000000..a63bc2e74 --- /dev/null +++ b/src/core/hle/service/am/self_controller.h @@ -0,0 +1,58 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class ISelfController final : public ServiceFramework<ISelfController> { +public: + explicit ISelfController(Core::System& system_, std::shared_ptr<Applet> applet_, + Nvnflinger::Nvnflinger& nvnflinger_); + ~ISelfController() override; + +private: + void Exit(HLERequestContext& ctx); + void LockExit(HLERequestContext& ctx); + void UnlockExit(HLERequestContext& ctx); + void EnterFatalSection(HLERequestContext& ctx); + void LeaveFatalSection(HLERequestContext& ctx); + void GetLibraryAppletLaunchableEvent(HLERequestContext& ctx); + void SetScreenShotPermission(HLERequestContext& ctx); + void SetOperationModeChangedNotification(HLERequestContext& ctx); + void SetPerformanceModeChangedNotification(HLERequestContext& ctx); + void SetFocusHandlingMode(HLERequestContext& ctx); + void SetRestartMessageEnabled(HLERequestContext& ctx); + void SetScreenShotAppletIdentityInfo(HLERequestContext& ctx); + void SetOutOfFocusSuspendingEnabled(HLERequestContext& ctx); + void SetAlbumImageOrientation(HLERequestContext& ctx); + void IsSystemBufferSharingEnabled(HLERequestContext& ctx); + void GetSystemSharedBufferHandle(HLERequestContext& ctx); + void GetSystemSharedLayerHandle(HLERequestContext& ctx); + void CreateManagedDisplayLayer(HLERequestContext& ctx); + void CreateManagedDisplaySeparableLayer(HLERequestContext& ctx); + void SetHandlesRequestToDisplay(HLERequestContext& ctx); + void ApproveToDisplay(HLERequestContext& ctx); + void SetIdleTimeDetectionExtension(HLERequestContext& ctx); + void GetIdleTimeDetectionExtension(HLERequestContext& ctx); + void ReportUserIsActive(HLERequestContext& ctx); + void SetAutoSleepDisabled(HLERequestContext& ctx); + void IsAutoSleepDisabled(HLERequestContext& ctx); + void GetAccumulatedSuspendedTickValue(HLERequestContext& ctx); + void GetAccumulatedSuspendedTickChangedEvent(HLERequestContext& ctx); + void SetAlbumImageTakenNotificationEnabled(HLERequestContext& ctx); + void SaveCurrentScreenshot(HLERequestContext& ctx); + void SetRecordVolumeMuted(HLERequestContext& ctx); + + Result EnsureBufferSharingEnabled(Kernel::KProcess* process); + + Nvnflinger::Nvnflinger& nvnflinger; + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/storage.cpp b/src/core/hle/service/am/storage.cpp new file mode 100644 index 000000000..4e82afd1c --- /dev/null +++ b/src/core/hle/service/am/storage.cpp @@ -0,0 +1,59 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/library_applet_storage.h" +#include "core/hle/service/am/storage.h" +#include "core/hle/service/am/storage_accessor.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IStorage::IStorage(Core::System& system_, std::shared_ptr<LibraryAppletStorage> impl_) + : ServiceFramework{system_, "IStorage"}, impl{std::move(impl_)} { + static const FunctionInfo functions[] = { + {0, &IStorage::Open, "Open"}, + {1, &IStorage::OpenTransferStorage, "OpenTransferStorage"}, + }; + + RegisterHandlers(functions); +} + +IStorage::IStorage(Core::System& system_, std::vector<u8>&& data) + : IStorage(system_, CreateStorage(std::move(data))) {} + +IStorage::~IStorage() = default; + +void IStorage::Open(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + if (impl->GetHandle() != nullptr) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(AM::ResultInvalidStorageType); + return; + } + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IStorageAccessor>(system, impl); +} + +void IStorage::OpenTransferStorage(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + if (impl->GetHandle() == nullptr) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(AM::ResultInvalidStorageType); + return; + } + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ITransferStorageAccessor>(system, impl); +} + +std::vector<u8> IStorage::GetData() const { + return impl->GetData(); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/storage.h b/src/core/hle/service/am/storage.h new file mode 100644 index 000000000..10d00b141 --- /dev/null +++ b/src/core/hle/service/am/storage.h @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +class LibraryAppletStorage; + +class IStorage final : public ServiceFramework<IStorage> { +public: + explicit IStorage(Core::System& system_, std::shared_ptr<LibraryAppletStorage> impl_); + explicit IStorage(Core::System& system_, std::vector<u8>&& buffer); + ~IStorage() override; + + std::shared_ptr<LibraryAppletStorage> GetImpl() const { + return impl; + } + + std::vector<u8> GetData() const; + +private: + void Open(HLERequestContext& ctx); + void OpenTransferStorage(HLERequestContext& ctx); + + const std::shared_ptr<LibraryAppletStorage> impl; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/storage_accessor.cpp b/src/core/hle/service/am/storage_accessor.cpp new file mode 100644 index 000000000..a1184b065 --- /dev/null +++ b/src/core/hle/service/am/storage_accessor.cpp @@ -0,0 +1,90 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/kernel/k_transfer_memory.h" +#include "core/hle/service/am/am_results.h" +#include "core/hle/service/am/library_applet_storage.h" +#include "core/hle/service/am/storage_accessor.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IStorageAccessor::IStorageAccessor(Core::System& system_, + std::shared_ptr<LibraryAppletStorage> impl_) + : ServiceFramework{system_, "IStorageAccessor"}, impl{std::move(impl_)} { + static const FunctionInfo functions[] = { + {0, &IStorageAccessor::GetSize, "GetSize"}, + {10, &IStorageAccessor::Write, "Write"}, + {11, &IStorageAccessor::Read, "Read"}, + }; + + RegisterHandlers(functions); +} + +IStorageAccessor::~IStorageAccessor() = default; + +void IStorageAccessor::GetSize(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 4}; + + rb.Push(ResultSuccess); + rb.Push(impl->GetSize()); +} + +void IStorageAccessor::Write(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const s64 offset{rp.Pop<s64>()}; + const auto data{ctx.ReadBuffer()}; + LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, data.size()); + + const auto res{impl->Write(offset, data.data(), data.size())}; + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res); +} + +void IStorageAccessor::Read(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + + const s64 offset{rp.Pop<s64>()}; + std::vector<u8> data(ctx.GetWriteBufferSize()); + + LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, data.size()); + + const auto res{impl->Read(offset, data.data(), data.size())}; + + ctx.WriteBuffer(data); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res); +} + +ITransferStorageAccessor::ITransferStorageAccessor(Core::System& system_, + std::shared_ptr<LibraryAppletStorage> impl_) + : ServiceFramework{system_, "ITransferStorageAccessor"}, impl{std::move(impl_)} { + static const FunctionInfo functions[] = { + {0, &ITransferStorageAccessor::GetSize, "GetSize"}, + {1, &ITransferStorageAccessor::GetHandle, "GetHandle"}, + }; + + RegisterHandlers(functions); +} + +ITransferStorageAccessor::~ITransferStorageAccessor() = default; + +void ITransferStorageAccessor::GetSize(HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push(impl->GetSize()); +} + +void ITransferStorageAccessor::GetHandle(HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 4, 1}; + rb.Push(ResultSuccess); + rb.Push(impl->GetSize()); + rb.PushCopyObjects(impl->GetHandle()); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/storage_accessor.h b/src/core/hle/service/am/storage_accessor.h new file mode 100644 index 000000000..b9aa85a66 --- /dev/null +++ b/src/core/hle/service/am/storage_accessor.h @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/am/storage.h" +#include "core/hle/service/service.h" + +namespace Service::AM { + +class IStorageAccessor final : public ServiceFramework<IStorageAccessor> { +public: + explicit IStorageAccessor(Core::System& system_, std::shared_ptr<LibraryAppletStorage> impl_); + ~IStorageAccessor() override; + +private: + void GetSize(HLERequestContext& ctx); + void Write(HLERequestContext& ctx); + void Read(HLERequestContext& ctx); + + const std::shared_ptr<LibraryAppletStorage> impl; +}; + +class ITransferStorageAccessor final : public ServiceFramework<ITransferStorageAccessor> { +public: + explicit ITransferStorageAccessor(Core::System& system_, + std::shared_ptr<LibraryAppletStorage> impl_); + ~ITransferStorageAccessor() override; + +private: + void GetSize(HLERequestContext& ctx); + void GetHandle(HLERequestContext& ctx); + + const std::shared_ptr<LibraryAppletStorage> impl; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/system_applet_proxy.cpp b/src/core/hle/service/am/system_applet_proxy.cpp new file mode 100644 index 000000000..38643408e --- /dev/null +++ b/src/core/hle/service/am/system_applet_proxy.cpp @@ -0,0 +1,136 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/applet_common_functions.h" +#include "core/hle/service/am/application_creator.h" +#include "core/hle/service/am/audio_controller.h" +#include "core/hle/service/am/common_state_getter.h" +#include "core/hle/service/am/debug_functions.h" +#include "core/hle/service/am/display_controller.h" +#include "core/hle/service/am/global_state_controller.h" +#include "core/hle/service/am/home_menu_functions.h" +#include "core/hle/service/am/library_applet_creator.h" +#include "core/hle/service/am/library_applet_self_accessor.h" +#include "core/hle/service/am/process_winding_controller.h" +#include "core/hle/service/am/self_controller.h" +#include "core/hle/service/am/system_applet_proxy.h" +#include "core/hle/service/am/window_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +ISystemAppletProxy::ISystemAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, + std::shared_ptr<Applet> applet_, Core::System& system_) + : ServiceFramework{system_, "ISystemAppletProxy"}, nvnflinger{nvnflinger_}, applet{std::move( + applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, &ISystemAppletProxy::GetCommonStateGetter, "GetCommonStateGetter"}, + {1, &ISystemAppletProxy::GetSelfController, "GetSelfController"}, + {2, &ISystemAppletProxy::GetWindowController, "GetWindowController"}, + {3, &ISystemAppletProxy::GetAudioController, "GetAudioController"}, + {4, &ISystemAppletProxy::GetDisplayController, "GetDisplayController"}, + {10, nullptr, "GetProcessWindingController"}, + {11, &ISystemAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, + {20, &ISystemAppletProxy::GetHomeMenuFunctions, "GetHomeMenuFunctions"}, + {21, &ISystemAppletProxy::GetGlobalStateController, "GetGlobalStateController"}, + {22, &ISystemAppletProxy::GetApplicationCreator, "GetApplicationCreator"}, + {23, &ISystemAppletProxy::GetAppletCommonFunctions, "GetAppletCommonFunctions"}, + {1000, &ISystemAppletProxy::GetDebugFunctions, "GetDebugFunctions"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +ISystemAppletProxy::~ISystemAppletProxy() = default; + +void ISystemAppletProxy::GetCommonStateGetter(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ICommonStateGetter>(system, applet); +} + +void ISystemAppletProxy::GetSelfController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ISelfController>(system, applet, nvnflinger); +} + +void ISystemAppletProxy::GetWindowController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IWindowController>(system, applet); +} + +void ISystemAppletProxy::GetAudioController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IAudioController>(system); +} + +void ISystemAppletProxy::GetDisplayController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IDisplayController>(system, applet); +} + +void ISystemAppletProxy::GetLibraryAppletCreator(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<ILibraryAppletCreator>(system, applet); +} + +void ISystemAppletProxy::GetHomeMenuFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IHomeMenuFunctions>(system); +} + +void ISystemAppletProxy::GetGlobalStateController(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IGlobalStateController>(system); +} + +void ISystemAppletProxy::GetApplicationCreator(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IApplicationCreator>(system); +} + +void ISystemAppletProxy::GetAppletCommonFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IAppletCommonFunctions>(system, applet); +} + +void ISystemAppletProxy::GetDebugFunctions(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IDebugFunctions>(system); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/system_applet_proxy.h b/src/core/hle/service/am/system_applet_proxy.h new file mode 100644 index 000000000..0390cd1e5 --- /dev/null +++ b/src/core/hle/service/am/system_applet_proxy.h @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/am/applet_message_queue.h" +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class ISystemAppletProxy final : public ServiceFramework<ISystemAppletProxy> { +public: + explicit ISystemAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, + std::shared_ptr<Applet> applet_, Core::System& system_); + ~ISystemAppletProxy(); + +private: + void GetCommonStateGetter(HLERequestContext& ctx); + void GetSelfController(HLERequestContext& ctx); + void GetWindowController(HLERequestContext& ctx); + void GetAudioController(HLERequestContext& ctx); + void GetDisplayController(HLERequestContext& ctx); + void GetLibraryAppletCreator(HLERequestContext& ctx); + void GetHomeMenuFunctions(HLERequestContext& ctx); + void GetGlobalStateController(HLERequestContext& ctx); + void GetApplicationCreator(HLERequestContext& ctx); + void GetAppletCommonFunctions(HLERequestContext& ctx); + void GetDebugFunctions(HLERequestContext& ctx); + + Nvnflinger::Nvnflinger& nvnflinger; + std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/system_buffer_manager.cpp b/src/core/hle/service/am/system_buffer_manager.cpp new file mode 100644 index 000000000..60a9afc9d --- /dev/null +++ b/src/core/hle/service/am/system_buffer_manager.cpp @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/system_buffer_manager.h" +#include "core/hle/service/nvnflinger/fb_share_buffer_manager.h" +#include "core/hle/service/nvnflinger/nvnflinger.h" +#include "core/hle/service/vi/vi_results.h" + +namespace Service::AM { + +SystemBufferManager::SystemBufferManager() = default; + +SystemBufferManager::~SystemBufferManager() { + if (!m_nvnflinger) { + return; + } + + // Clean up shared layers. + if (m_buffer_sharing_enabled) { + } +} + +bool SystemBufferManager::Initialize(Nvnflinger::Nvnflinger* nvnflinger, Kernel::KProcess* process, + AppletId applet_id) { + if (m_nvnflinger) { + return m_buffer_sharing_enabled; + } + + m_process = process; + m_nvnflinger = nvnflinger; + m_buffer_sharing_enabled = false; + m_system_shared_buffer_id = 0; + m_system_shared_layer_id = 0; + + if (applet_id <= AppletId::Application) { + return false; + } + + const auto display_id = m_nvnflinger->OpenDisplay("Default").value(); + const auto res = m_nvnflinger->GetSystemBufferManager().Initialize( + &m_system_shared_buffer_id, &m_system_shared_layer_id, display_id); + + if (res.IsSuccess()) { + m_buffer_sharing_enabled = true; + m_nvnflinger->SetLayerVisibility(m_system_shared_layer_id, m_visible); + } + + return m_buffer_sharing_enabled; +} + +void SystemBufferManager::SetWindowVisibility(bool visible) { + if (m_visible == visible) { + return; + } + + m_visible = visible; + + if (m_nvnflinger) { + m_nvnflinger->SetLayerVisibility(m_system_shared_layer_id, m_visible); + } +} + +Result SystemBufferManager::WriteAppletCaptureBuffer(bool* out_was_written, + s32* out_fbshare_layer_index) { + // TODO + R_SUCCEED(); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/system_buffer_manager.h b/src/core/hle/service/am/system_buffer_manager.h new file mode 100644 index 000000000..98c3cf055 --- /dev/null +++ b/src/core/hle/service/am/system_buffer_manager.h @@ -0,0 +1,51 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <set> + +#include "common/common_funcs.h" +#include "common/common_types.h" + +#include "core/hle/service/am/am_types.h" + +namespace Kernel { +class KProcess; +} + +namespace Service::Nvnflinger { +class Nvnflinger; +} + +union Result; + +namespace Service::AM { + +class SystemBufferManager { +public: + SystemBufferManager(); + ~SystemBufferManager(); + + bool Initialize(Nvnflinger::Nvnflinger* flinger, Kernel::KProcess* process, AppletId applet_id); + + void GetSystemSharedLayerHandle(u64* out_system_shared_buffer_id, + u64* out_system_shared_layer_id) { + *out_system_shared_buffer_id = m_system_shared_buffer_id; + *out_system_shared_layer_id = m_system_shared_layer_id; + } + + void SetWindowVisibility(bool visible); + + Result WriteAppletCaptureBuffer(bool* out_was_written, s32* out_fbshare_layer_index); + +private: + Kernel::KProcess* m_process{}; + Nvnflinger::Nvnflinger* m_nvnflinger{}; + bool m_buffer_sharing_enabled{}; + bool m_visible{true}; + u64 m_system_shared_buffer_id{}; + u64 m_system_shared_layer_id{}; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/am/window_controller.cpp b/src/core/hle/service/am/window_controller.cpp new file mode 100644 index 000000000..f00957f83 --- /dev/null +++ b/src/core/hle/service/am/window_controller.cpp @@ -0,0 +1,86 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/applet.h" +#include "core/hle/service/am/window_controller.h" +#include "core/hle/service/ipc_helpers.h" + +namespace Service::AM { + +IWindowController::IWindowController(Core::System& system_, std::shared_ptr<Applet> applet_) + : ServiceFramework{system_, "IWindowController"}, applet{std::move(applet_)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, nullptr, "CreateWindow"}, + {1, &IWindowController::GetAppletResourceUserId, "GetAppletResourceUserId"}, + {2, &IWindowController::GetAppletResourceUserIdOfCallerApplet, "GetAppletResourceUserIdOfCallerApplet"}, + {10, &IWindowController::AcquireForegroundRights, "AcquireForegroundRights"}, + {11, nullptr, "ReleaseForegroundRights"}, + {12, nullptr, "RejectToChangeIntoBackground"}, + {20, &IWindowController::SetAppletWindowVisibility, "SetAppletWindowVisibility"}, + {21, &IWindowController::SetAppletGpuTimeSlice, "SetAppletGpuTimeSlice"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IWindowController::~IWindowController() = default; + +void IWindowController::GetAppletResourceUserId(HLERequestContext& ctx) { + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push<u64>(applet->aruid); +} + +void IWindowController::GetAppletResourceUserIdOfCallerApplet(HLERequestContext& ctx) { + u64 aruid = 0; + if (auto caller = applet->caller_applet.lock(); caller) { + aruid = caller->aruid; + } + + LOG_WARNING(Service_AM, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push<u64>(aruid); +} + +void IWindowController::AcquireForegroundRights(HLERequestContext& ctx) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IWindowController::SetAppletWindowVisibility(HLERequestContext& ctx) { + LOG_INFO(Service_AM, "called"); + + IPC::RequestParser rp{ctx}; + const bool visible = rp.Pop<bool>(); + + applet->system_buffer_manager.SetWindowVisibility(visible); + applet->hid_registration.EnableAppletToGetInput(visible); + + if (visible) { + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); + applet->focus_state = FocusState::InFocus; + } else { + applet->focus_state = FocusState::NotInFocus; + } + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IWindowController::SetAppletGpuTimeSlice(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto time_slice = rp.Pop<s64>(); + + LOG_WARNING(Service_AM, "(STUBBED) called, time_slice={}", time_slice); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/window_controller.h b/src/core/hle/service/am/window_controller.h new file mode 100644 index 000000000..a28219abe --- /dev/null +++ b/src/core/hle/service/am/window_controller.h @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::AM { + +struct Applet; + +class IWindowController final : public ServiceFramework<IWindowController> { +public: + explicit IWindowController(Core::System& system_, std::shared_ptr<Applet> applet_); + ~IWindowController() override; + +private: + void GetAppletResourceUserId(HLERequestContext& ctx); + void GetAppletResourceUserIdOfCallerApplet(HLERequestContext& ctx); + void AcquireForegroundRights(HLERequestContext& ctx); + void SetAppletWindowVisibility(HLERequestContext& ctx); + void SetAppletGpuTimeSlice(HLERequestContext& ctx); + + const std::shared_ptr<Applet> applet; +}; + +} // namespace Service::AM diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp index 7075ab800..486719cc0 100644 --- a/src/core/hle/service/aoc/aoc_u.cpp +++ b/src/core/hle/service/aoc/aoc_u.cpp @@ -202,7 +202,7 @@ void AOC_U::ListAddOnContent(HLERequestContext& ctx) { LOG_DEBUG(Service_AOC, "called with offset={}, count={}, process_id={}", offset, count, process_id); - const auto current = system.GetApplicationProcessProgramID(); + const auto current = FileSys::GetBaseTitleID(system.GetApplicationProcessProgramID()); std::vector<u32> out; const auto& disabled = Settings::values.disabled_addons[current]; diff --git a/src/core/hle/service/caps/caps_a.cpp b/src/core/hle/service/caps/caps_a.cpp index 69acb3a8b..47ff072c5 100644 --- a/src/core/hle/service/caps/caps_a.cpp +++ b/src/core/hle/service/caps/caps_a.cpp @@ -5,7 +5,7 @@ #include "core/hle/service/caps/caps_a.h" #include "core/hle/service/caps/caps_manager.h" #include "core/hle/service/caps/caps_result.h" -#include "core/hle/service/caps/caps_types.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/ipc_helpers.h" namespace Service::Capture { @@ -18,9 +18,9 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_, {0, nullptr, "GetAlbumFileCount"}, {1, nullptr, "GetAlbumFileList"}, {2, nullptr, "LoadAlbumFile"}, - {3, &IAlbumAccessorService::DeleteAlbumFile, "DeleteAlbumFile"}, + {3, C<&IAlbumAccessorService::DeleteAlbumFile>, "DeleteAlbumFile"}, {4, nullptr, "StorageCopyAlbumFile"}, - {5, &IAlbumAccessorService::IsAlbumMounted, "IsAlbumMounted"}, + {5, C<&IAlbumAccessorService::IsAlbumMounted>, "IsAlbumMounted"}, {6, nullptr, "GetAlbumUsage"}, {7, nullptr, "GetAlbumFileSize"}, {8, nullptr, "LoadAlbumFileThumbnail"}, @@ -33,18 +33,18 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_, {15, nullptr, "GetAlbumUsage3"}, {16, nullptr, "GetAlbumMountResult"}, {17, nullptr, "GetAlbumUsage16"}, - {18, &IAlbumAccessorService::Unknown18, "Unknown18"}, + {18, C<&IAlbumAccessorService::Unknown18>, "Unknown18"}, {19, nullptr, "Unknown19"}, {100, nullptr, "GetAlbumFileCountEx0"}, - {101, &IAlbumAccessorService::GetAlbumFileListEx0, "GetAlbumFileListEx0"}, + {101, C<&IAlbumAccessorService::GetAlbumFileListEx0>, "GetAlbumFileListEx0"}, {202, nullptr, "SaveEditedScreenShot"}, {301, nullptr, "GetLastThumbnail"}, {302, nullptr, "GetLastOverlayMovieThumbnail"}, - {401, &IAlbumAccessorService::GetAutoSavingStorage, "GetAutoSavingStorage"}, + {401, C<&IAlbumAccessorService::GetAutoSavingStorage>, "GetAutoSavingStorage"}, {501, nullptr, "GetRequiredStorageSpaceSizeToCopyAll"}, {1001, nullptr, "LoadAlbumScreenShotThumbnailImageEx0"}, - {1002, &IAlbumAccessorService::LoadAlbumScreenShotImageEx1, "LoadAlbumScreenShotImageEx1"}, - {1003, &IAlbumAccessorService::LoadAlbumScreenShotThumbnailImageEx1, "LoadAlbumScreenShotThumbnailImageEx1"}, + {1002, C<&IAlbumAccessorService::LoadAlbumScreenShotImageEx1>, "LoadAlbumScreenShotImageEx1"}, + {1003, C<&IAlbumAccessorService::LoadAlbumScreenShotThumbnailImageEx1>, "LoadAlbumScreenShotThumbnailImageEx1"}, {8001, nullptr, "ForceAlbumUnmounted"}, {8002, nullptr, "ResetAlbumMountStatus"}, {8011, nullptr, "RefreshAlbumCache"}, @@ -62,138 +62,70 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_, IAlbumAccessorService::~IAlbumAccessorService() = default; -void IAlbumAccessorService::DeleteAlbumFile(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto file_id{rp.PopRaw<AlbumFileId>()}; - +Result IAlbumAccessorService::DeleteAlbumFile(AlbumFileId file_id) { LOG_INFO(Service_Capture, "called, application_id=0x{:0x}, storage={}, type={}", file_id.application_id, file_id.storage, file_id.type); - Result result = manager->DeleteAlbumFile(file_id); - result = TranslateResult(result); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(result); + const Result result = manager->DeleteAlbumFile(file_id); + R_RETURN(TranslateResult(result)); } -void IAlbumAccessorService::IsAlbumMounted(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto storage{rp.PopEnum<AlbumStorage>()}; - +Result IAlbumAccessorService::IsAlbumMounted(Out<bool> out_is_mounted, AlbumStorage storage) { LOG_INFO(Service_Capture, "called, storage={}", storage); - Result result = manager->IsAlbumMounted(storage); - const bool is_mounted = result.IsSuccess(); - result = TranslateResult(result); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(result); - rb.Push<u8>(is_mounted); + const Result result = manager->IsAlbumMounted(storage); + *out_is_mounted = result.IsSuccess(); + R_RETURN(TranslateResult(result)); } -void IAlbumAccessorService::Unknown18(HLERequestContext& ctx) { - struct UnknownBuffer { - INSERT_PADDING_BYTES(0x10); - }; - static_assert(sizeof(UnknownBuffer) == 0x10, "UnknownBuffer is an invalid size"); - +Result IAlbumAccessorService::Unknown18( + Out<u32> out_buffer_size, + OutArray<u8, BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_buffer) { LOG_WARNING(Service_Capture, "(STUBBED) called"); - - std::vector<UnknownBuffer> buffer{}; - - if (!buffer.empty()) { - ctx.WriteBuffer(buffer); - } - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(static_cast<u32>(buffer.size())); + *out_buffer_size = 0; + R_SUCCEED(); } -void IAlbumAccessorService::GetAlbumFileListEx0(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto storage{rp.PopEnum<AlbumStorage>()}; - const auto flags{rp.Pop<u8>()}; - const auto album_entry_size{ctx.GetWriteBufferNumElements<AlbumEntry>()}; - +Result IAlbumAccessorService::GetAlbumFileListEx0( + Out<u64> out_entries_size, AlbumStorage storage, u8 flags, + OutArray<AlbumEntry, BufferAttr_HipcMapAlias> out_entries) { LOG_INFO(Service_Capture, "called, storage={}, flags={}", storage, flags); - std::vector<AlbumEntry> entries; - Result result = manager->GetAlbumFileList(entries, storage, flags); - result = TranslateResult(result); - - entries.resize(std::min(album_entry_size, entries.size())); - - if (!entries.empty()) { - ctx.WriteBuffer(entries); - } - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(result); - rb.Push<u64>(entries.size()); + const Result result = manager->GetAlbumFileList(out_entries, *out_entries_size, storage, flags); + R_RETURN(TranslateResult(result)); } -void IAlbumAccessorService::GetAutoSavingStorage(HLERequestContext& ctx) { +Result IAlbumAccessorService::GetAutoSavingStorage(Out<bool> out_is_autosaving) { LOG_WARNING(Service_Capture, "(STUBBED) called"); - bool is_autosaving{}; - Result result = manager->GetAutoSavingStorage(is_autosaving); - result = TranslateResult(result); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(result); - rb.Push<u8>(is_autosaving); + const Result result = manager->GetAutoSavingStorage(*out_is_autosaving); + R_RETURN(TranslateResult(result)); } -void IAlbumAccessorService::LoadAlbumScreenShotImageEx1(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto file_id{rp.PopRaw<AlbumFileId>()}; - const auto decoder_options{rp.PopRaw<ScreenShotDecodeOption>()}; - const auto image_buffer_size{ctx.GetWriteBufferSize(1)}; - +Result IAlbumAccessorService::LoadAlbumScreenShotImageEx1( + const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options, + OutLargeData<LoadAlbumScreenShotImageOutput, BufferAttr_HipcMapAlias> out_image_output, + OutArray<u8, BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_image, + OutArray<u8, BufferAttr_HipcMapAlias> out_buffer) { LOG_INFO(Service_Capture, "called, application_id=0x{:0x}, storage={}, type={}, flags={}", file_id.application_id, file_id.storage, file_id.type, decoder_options.flags); - std::vector<u8> image; - LoadAlbumScreenShotImageOutput image_output; - Result result = - manager->LoadAlbumScreenShotImage(image_output, image, file_id, decoder_options); - result = TranslateResult(result); - - if (image.size() > image_buffer_size) { - result = ResultWorkMemoryError; - } - - if (result.IsSuccess()) { - ctx.WriteBuffer(image_output, 0); - ctx.WriteBuffer(image, 1); - } - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(result); + const Result result = + manager->LoadAlbumScreenShotImage(*out_image_output, out_image, file_id, decoder_options); + R_RETURN(TranslateResult(result)); } -void IAlbumAccessorService::LoadAlbumScreenShotThumbnailImageEx1(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto file_id{rp.PopRaw<AlbumFileId>()}; - const auto decoder_options{rp.PopRaw<ScreenShotDecodeOption>()}; - +Result IAlbumAccessorService::LoadAlbumScreenShotThumbnailImageEx1( + const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options, + OutLargeData<LoadAlbumScreenShotImageOutput, BufferAttr_HipcMapAlias> out_image_output, + OutArray<u8, BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_image, + OutArray<u8, BufferAttr_HipcMapAlias> out_buffer) { LOG_INFO(Service_Capture, "called, application_id=0x{:0x}, storage={}, type={}, flags={}", file_id.application_id, file_id.storage, file_id.type, decoder_options.flags); - std::vector<u8> image(ctx.GetWriteBufferSize(1)); - LoadAlbumScreenShotImageOutput image_output; - Result result = - manager->LoadAlbumScreenShotThumbnail(image_output, image, file_id, decoder_options); - result = TranslateResult(result); - - if (result.IsSuccess()) { - ctx.WriteBuffer(image_output, 0); - ctx.WriteBuffer(image, 1); - } - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(result); + const Result result = manager->LoadAlbumScreenShotThumbnail(*out_image_output, out_image, + file_id, decoder_options); + R_RETURN(TranslateResult(result)); } Result IAlbumAccessorService::TranslateResult(Result in_result) { diff --git a/src/core/hle/service/caps/caps_a.h b/src/core/hle/service/caps/caps_a.h index c90cff71e..2cb9b4547 100644 --- a/src/core/hle/service/caps/caps_a.h +++ b/src/core/hle/service/caps/caps_a.h @@ -3,6 +3,8 @@ #pragma once +#include "core/hle/service/caps/caps_types.h" +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Core { @@ -19,13 +21,31 @@ public: ~IAlbumAccessorService() override; private: - void DeleteAlbumFile(HLERequestContext& ctx); - void IsAlbumMounted(HLERequestContext& ctx); - void Unknown18(HLERequestContext& ctx); - void GetAlbumFileListEx0(HLERequestContext& ctx); - void GetAutoSavingStorage(HLERequestContext& ctx); - void LoadAlbumScreenShotImageEx1(HLERequestContext& ctx); - void LoadAlbumScreenShotThumbnailImageEx1(HLERequestContext& ctx); + Result DeleteAlbumFile(AlbumFileId file_id); + + Result IsAlbumMounted(Out<bool> out_is_mounted, AlbumStorage storage); + + Result Unknown18( + Out<u32> out_buffer_size, + OutArray<u8, BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> + out_buffer); + + Result GetAlbumFileListEx0(Out<u64> out_entries_size, AlbumStorage storage, u8 flags, + OutArray<AlbumEntry, BufferAttr_HipcMapAlias> out_entries); + + Result GetAutoSavingStorage(Out<bool> out_is_autosaving); + + Result LoadAlbumScreenShotImageEx1( + const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options, + OutLargeData<LoadAlbumScreenShotImageOutput, BufferAttr_HipcMapAlias> out_image_output, + OutArray<u8, BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_image, + OutArray<u8, BufferAttr_HipcMapAlias> out_buffer); + + Result LoadAlbumScreenShotThumbnailImageEx1( + const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options, + OutLargeData<LoadAlbumScreenShotImageOutput, BufferAttr_HipcMapAlias> out_image_output, + OutArray<u8, BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_image, + OutArray<u8, BufferAttr_HipcMapAlias> out_buffer); Result TranslateResult(Result in_result); diff --git a/src/core/hle/service/caps/caps_c.cpp b/src/core/hle/service/caps/caps_c.cpp index 1e7fe6474..6993c04c2 100644 --- a/src/core/hle/service/caps/caps_c.cpp +++ b/src/core/hle/service/caps/caps_c.cpp @@ -6,6 +6,7 @@ #include "core/hle/service/caps/caps_manager.h" #include "core/hle/service/caps/caps_result.h" #include "core/hle/service/caps/caps_types.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/ipc_helpers.h" namespace Service::Capture { @@ -17,7 +18,7 @@ IAlbumControlService::IAlbumControlService(Core::System& system_, static const FunctionInfo functions[] = { {1, nullptr, "CaptureRawImage"}, {2, nullptr, "CaptureRawImageWithTimeout"}, - {33, &IAlbumControlService::SetShimLibraryVersion, "SetShimLibraryVersion"}, + {33, C<&IAlbumControlService::SetShimLibraryVersion>, "SetShimLibraryVersion"}, {1001, nullptr, "RequestTakingScreenShot"}, {1002, nullptr, "RequestTakingScreenShotWithTimeout"}, {1011, nullptr, "NotifyTakingScreenShotRefused"}, @@ -42,16 +43,11 @@ IAlbumControlService::IAlbumControlService(Core::System& system_, IAlbumControlService::~IAlbumControlService() = default; -void IAlbumControlService::SetShimLibraryVersion(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto library_version{rp.Pop<u64>()}; - const auto applet_resource_user_id{rp.Pop<u64>()}; - +Result IAlbumControlService::SetShimLibraryVersion(ShimLibraryVersion library_version, + ClientAppletResourceUserId aruid) { LOG_WARNING(Service_Capture, "(STUBBED) called. library_version={}, applet_resource_user_id={}", - library_version, applet_resource_user_id); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + library_version, aruid.pid); + R_SUCCEED(); } } // namespace Service::Capture diff --git a/src/core/hle/service/caps/caps_c.h b/src/core/hle/service/caps/caps_c.h index 92ba242db..0ecdfa114 100644 --- a/src/core/hle/service/caps/caps_c.h +++ b/src/core/hle/service/caps/caps_c.h @@ -3,6 +3,7 @@ #pragma once +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Core { @@ -11,6 +12,7 @@ class System; namespace Service::Capture { class AlbumManager; +enum class ShimLibraryVersion : u64; class IAlbumControlService final : public ServiceFramework<IAlbumControlService> { public: @@ -19,7 +21,8 @@ public: ~IAlbumControlService() override; private: - void SetShimLibraryVersion(HLERequestContext& ctx); + Result SetShimLibraryVersion(ShimLibraryVersion library_version, + ClientAppletResourceUserId aruid); std::shared_ptr<AlbumManager> manager = nullptr; }; diff --git a/src/core/hle/service/caps/caps_manager.cpp b/src/core/hle/service/caps/caps_manager.cpp index 3a22b135f..7f0bc127f 100644 --- a/src/core/hle/service/caps/caps_manager.cpp +++ b/src/core/hle/service/caps/caps_manager.cpp @@ -58,8 +58,8 @@ Result AlbumManager::IsAlbumMounted(AlbumStorage storage) { return is_mounted ? ResultSuccess : ResultIsNotMounted; } -Result AlbumManager::GetAlbumFileList(std::vector<AlbumEntry>& out_entries, AlbumStorage storage, - u8 flags) const { +Result AlbumManager::GetAlbumFileList(std::span<AlbumEntry> out_entries, u64& out_entries_count, + AlbumStorage storage, u8 flags) const { if (storage > AlbumStorage::Sd) { return ResultInvalidStorage; } @@ -72,51 +72,55 @@ Result AlbumManager::GetAlbumFileList(std::vector<AlbumEntry>& out_entries, Albu if (file_id.storage != storage) { continue; } - if (out_entries.size() >= SdAlbumFileLimit) { + if (out_entries_count >= SdAlbumFileLimit) { + break; + } + if (out_entries_count >= out_entries.size()) { break; } const auto entry_size = Common::FS::GetSize(path); - out_entries.push_back({ + out_entries[out_entries_count++] = { .entry_size = entry_size, .file_id = file_id, - }); + }; } return ResultSuccess; } -Result AlbumManager::GetAlbumFileList(std::vector<ApplicationAlbumFileEntry>& out_entries, - ContentType content_type, s64 start_posix_time, - s64 end_posix_time, u64 aruid) const { +Result AlbumManager::GetAlbumFileList(std::span<ApplicationAlbumFileEntry> out_entries, + u64& out_entries_count, ContentType content_type, + s64 start_posix_time, s64 end_posix_time, u64 aruid) const { if (!is_mounted) { return ResultIsNotMounted; } - std::vector<ApplicationAlbumEntry> album_entries; + std::vector<ApplicationAlbumEntry> album_entries(out_entries.size()); const auto start_date = ConvertToAlbumDateTime(start_posix_time); const auto end_date = ConvertToAlbumDateTime(end_posix_time); - const auto result = GetAlbumFileList(album_entries, content_type, start_date, end_date, aruid); + const auto result = GetAlbumFileList(album_entries, out_entries_count, content_type, start_date, + end_date, aruid); if (result.IsError()) { return result; } - for (const auto& album_entry : album_entries) { - ApplicationAlbumFileEntry entry{ - .entry = album_entry, - .datetime = album_entry.datetime, + for (std::size_t i = 0; i < out_entries_count; i++) { + out_entries[i] = { + .entry = album_entries[i], + .datetime = album_entries[i].datetime, .unknown = {}, }; - out_entries.push_back(entry); } return ResultSuccess; } -Result AlbumManager::GetAlbumFileList(std::vector<ApplicationAlbumEntry>& out_entries, - ContentType content_type, AlbumFileDateTime start_date, - AlbumFileDateTime end_date, u64 aruid) const { +Result AlbumManager::GetAlbumFileList(std::span<ApplicationAlbumEntry> out_entries, + u64& out_entries_count, ContentType content_type, + AlbumFileDateTime start_date, AlbumFileDateTime end_date, + u64 aruid) const { if (!is_mounted) { return ResultIsNotMounted; } @@ -131,12 +135,15 @@ Result AlbumManager::GetAlbumFileList(std::vector<ApplicationAlbumEntry>& out_en if (file_id.date < end_date) { continue; } - if (out_entries.size() >= SdAlbumFileLimit) { + if (out_entries_count >= SdAlbumFileLimit) { + break; + } + if (out_entries_count >= out_entries.size()) { break; } const auto entry_size = Common::FS::GetSize(path); - ApplicationAlbumEntry entry{ + out_entries[out_entries_count++] = { .size = entry_size, .hash{}, .datetime = file_id.date, @@ -144,7 +151,6 @@ Result AlbumManager::GetAlbumFileList(std::vector<ApplicationAlbumEntry>& out_en .content = content_type, .unknown = 1, }; - out_entries.push_back(entry); } return ResultSuccess; @@ -156,8 +162,7 @@ Result AlbumManager::GetAutoSavingStorage(bool& out_is_autosaving) const { } Result AlbumManager::LoadAlbumScreenShotImage(LoadAlbumScreenShotImageOutput& out_image_output, - std::vector<u8>& out_image, - const AlbumFileId& file_id, + std::span<u8> out_image, const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options) const { if (file_id.storage > AlbumStorage::Sd) { return ResultInvalidStorage; @@ -176,7 +181,9 @@ Result AlbumManager::LoadAlbumScreenShotImage(LoadAlbumScreenShotImageOutput& ou .orientation = AlbumImageOrientation::None, .unknown_1{}, .unknown_2{}, + .pad163{}, }, + .pad179{}, }; std::filesystem::path path; @@ -186,14 +193,12 @@ Result AlbumManager::LoadAlbumScreenShotImage(LoadAlbumScreenShotImageOutput& ou return result; } - out_image.resize(out_image_output.height * out_image_output.width * STBI_rgb_alpha); - return LoadImage(out_image, path, static_cast<int>(out_image_output.width), +static_cast<int>(out_image_output.height), decoder_options.flags); } Result AlbumManager::LoadAlbumScreenShotThumbnail( - LoadAlbumScreenShotImageOutput& out_image_output, std::vector<u8>& out_image, + LoadAlbumScreenShotImageOutput& out_image_output, std::span<u8> out_image, const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options) const { if (file_id.storage > AlbumStorage::Sd) { return ResultInvalidStorage; @@ -212,7 +217,9 @@ Result AlbumManager::LoadAlbumScreenShotThumbnail( .orientation = AlbumImageOrientation::None, .unknown_1{}, .unknown_2{}, + .pad163{}, }, + .pad179{}, }; std::filesystem::path path; @@ -222,8 +229,6 @@ Result AlbumManager::LoadAlbumScreenShotThumbnail( return result; } - out_image.resize(out_image_output.height * out_image_output.width * STBI_rgb_alpha); - return LoadImage(out_image, path, static_cast<int>(out_image_output.width), +static_cast<int>(out_image_output.height), decoder_options.flags); } diff --git a/src/core/hle/service/caps/caps_manager.h b/src/core/hle/service/caps/caps_manager.h index 6fd34f589..893a9075a 100644 --- a/src/core/hle/service/caps/caps_manager.h +++ b/src/core/hle/service/caps/caps_manager.h @@ -42,20 +42,20 @@ public: Result DeleteAlbumFile(const AlbumFileId& file_id); Result IsAlbumMounted(AlbumStorage storage); - Result GetAlbumFileList(std::vector<AlbumEntry>& out_entries, AlbumStorage storage, - u8 flags) const; - Result GetAlbumFileList(std::vector<ApplicationAlbumFileEntry>& out_entries, - ContentType content_type, s64 start_posix_time, s64 end_posix_time, - u64 aruid) const; - Result GetAlbumFileList(std::vector<ApplicationAlbumEntry>& out_entries, + Result GetAlbumFileList(std::span<AlbumEntry> out_entries, u64& out_entries_count, + AlbumStorage storage, u8 flags) const; + Result GetAlbumFileList(std::span<ApplicationAlbumFileEntry> out_entries, + u64& out_entries_count, ContentType content_type, s64 start_posix_time, + s64 end_posix_time, u64 aruid) const; + Result GetAlbumFileList(std::span<ApplicationAlbumEntry> out_entries, u64& out_entries_count, ContentType content_type, AlbumFileDateTime start_date, AlbumFileDateTime end_date, u64 aruid) const; Result GetAutoSavingStorage(bool& out_is_autosaving) const; Result LoadAlbumScreenShotImage(LoadAlbumScreenShotImageOutput& out_image_output, - std::vector<u8>& out_image, const AlbumFileId& file_id, + std::span<u8> out_image, const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options) const; Result LoadAlbumScreenShotThumbnail(LoadAlbumScreenShotImageOutput& out_image_output, - std::vector<u8>& out_image, const AlbumFileId& file_id, + std::span<u8> out_image, const AlbumFileId& file_id, const ScreenShotDecodeOption& decoder_options) const; Result SaveScreenShot(ApplicationAlbumEntry& out_entry, const ScreenShotAttribute& attribute, diff --git a/src/core/hle/service/caps/caps_ss.cpp b/src/core/hle/service/caps/caps_ss.cpp index eab023568..dfa7f1a84 100644 --- a/src/core/hle/service/caps/caps_ss.cpp +++ b/src/core/hle/service/caps/caps_ss.cpp @@ -3,10 +3,9 @@ #include "common/logging/log.h" #include "core/hle/service/caps/caps_manager.h" -#include "core/hle/service/caps/caps_types.h" -#include "core/hle/service/ipc_helpers.h" - #include "core/hle/service/caps/caps_ss.h" +#include "core/hle/service/cmif_serialization.h" +#include "core/hle/service/ipc_helpers.h" namespace Service::Capture { @@ -17,9 +16,9 @@ IScreenShotService::IScreenShotService(Core::System& system_, static const FunctionInfo functions[] = { {201, nullptr, "SaveScreenShot"}, {202, nullptr, "SaveEditedScreenShot"}, - {203, &IScreenShotService::SaveScreenShotEx0, "SaveScreenShotEx0"}, + {203, C<&IScreenShotService::SaveScreenShotEx0>, "SaveScreenShotEx0"}, {204, nullptr, "SaveEditedScreenShotEx0"}, - {206, &IScreenShotService::SaveEditedScreenShotEx1, "SaveEditedScreenShotEx1"}, + {206, C<&IScreenShotService::SaveEditedScreenShotEx1>, "SaveEditedScreenShotEx1"}, {208, nullptr, "SaveScreenShotOfMovieEx1"}, {1000, nullptr, "Unknown1000"}, }; @@ -30,69 +29,38 @@ IScreenShotService::IScreenShotService(Core::System& system_, IScreenShotService::~IScreenShotService() = default; -void IScreenShotService::SaveScreenShotEx0(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - struct Parameters { - ScreenShotAttribute attribute{}; - AlbumReportOption report_option{}; - INSERT_PADDING_BYTES(0x4); - u64 applet_resource_user_id{}; - }; - static_assert(sizeof(Parameters) == 0x50, "Parameters has incorrect size."); - - const auto parameters{rp.PopRaw<Parameters>()}; - const auto image_data_buffer = ctx.ReadBuffer(); - +Result IScreenShotService::SaveScreenShotEx0( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, + AlbumReportOption report_option, ClientAppletResourceUserId aruid, + InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer) { LOG_INFO(Service_Capture, "called, report_option={}, image_data_buffer_size={}, applet_resource_user_id={}", - parameters.report_option, image_data_buffer.size(), - parameters.applet_resource_user_id); + report_option, image_data_buffer.size(), aruid.pid); - ApplicationAlbumEntry entry{}; manager->FlipVerticallyOnWrite(false); - const auto result = - manager->SaveScreenShot(entry, parameters.attribute, parameters.report_option, - image_data_buffer, parameters.applet_resource_user_id); - - IPC::ResponseBuilder rb{ctx, 10}; - rb.Push(result); - rb.PushRaw(entry); + R_RETURN(manager->SaveScreenShot(*out_entry, attribute, report_option, image_data_buffer, + aruid.pid)); } -void IScreenShotService::SaveEditedScreenShotEx1(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - struct Parameters { - ScreenShotAttribute attribute; - u64 width; - u64 height; - u64 thumbnail_width; - u64 thumbnail_height; - AlbumFileId file_id; - }; - static_assert(sizeof(Parameters) == 0x78, "Parameters has incorrect size."); - - const auto parameters{rp.PopRaw<Parameters>()}; - const auto application_data_buffer = ctx.ReadBuffer(0); - const auto image_data_buffer = ctx.ReadBuffer(1); - const auto thumbnail_image_data_buffer = ctx.ReadBuffer(2); - +Result IScreenShotService::SaveEditedScreenShotEx1( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, u64 width, + u64 height, u64 thumbnail_width, u64 thumbnail_height, const AlbumFileId& file_id, + const InLargeData<std::array<u8, 0x400>, BufferAttr_HipcMapAlias> application_data_buffer, + const InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer, + const InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + thumbnail_image_data_buffer) { LOG_INFO(Service_Capture, "called, width={}, height={}, thumbnail_width={}, thumbnail_height={}, " - "application_id={:016x}, storage={}, type={}, app_data_buffer_size={}, " + "application_id={:016x}, storage={}, type={}, " "image_data_buffer_size={}, thumbnail_image_buffer_size={}", - parameters.width, parameters.height, parameters.thumbnail_width, - parameters.thumbnail_height, parameters.file_id.application_id, - parameters.file_id.storage, parameters.file_id.type, application_data_buffer.size(), - image_data_buffer.size(), thumbnail_image_data_buffer.size()); + width, height, thumbnail_width, thumbnail_height, file_id.application_id, + file_id.storage, file_id.type, image_data_buffer.size(), + thumbnail_image_data_buffer.size()); - ApplicationAlbumEntry entry{}; manager->FlipVerticallyOnWrite(false); - const auto result = manager->SaveEditedScreenShot(entry, parameters.attribute, - parameters.file_id, image_data_buffer); - - IPC::ResponseBuilder rb{ctx, 10}; - rb.Push(result); - rb.PushRaw(entry); + R_RETURN(manager->SaveEditedScreenShot(*out_entry, attribute, file_id, image_data_buffer)); } } // namespace Service::Capture diff --git a/src/core/hle/service/caps/caps_ss.h b/src/core/hle/service/caps/caps_ss.h index a7e9972ab..da4b4cc5f 100644 --- a/src/core/hle/service/caps/caps_ss.h +++ b/src/core/hle/service/caps/caps_ss.h @@ -3,6 +3,8 @@ #pragma once +#include "core/hle/service/caps/caps_types.h" +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Core { @@ -17,8 +19,20 @@ public: ~IScreenShotService() override; private: - void SaveScreenShotEx0(HLERequestContext& ctx); - void SaveEditedScreenShotEx1(HLERequestContext& ctx); + Result SaveScreenShotEx0( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, + AlbumReportOption report_option, ClientAppletResourceUserId aruid, + InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer); + + Result SaveEditedScreenShotEx1( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, u64 width, + u64 height, u64 thumbnail_width, u64 thumbnail_height, const AlbumFileId& file_id, + const InLargeData<std::array<u8, 0x400>, BufferAttr_HipcMapAlias> application_data_buffer, + const InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer, + const InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + thumbnail_image_data_buffer); std::shared_ptr<AlbumManager> manager; }; diff --git a/src/core/hle/service/caps/caps_su.cpp b/src/core/hle/service/caps/caps_su.cpp index 296b07b00..528f364f5 100644 --- a/src/core/hle/service/caps/caps_su.cpp +++ b/src/core/hle/service/caps/caps_su.cpp @@ -6,6 +6,7 @@ #include "core/hle/service/caps/caps_manager.h" #include "core/hle/service/caps/caps_su.h" #include "core/hle/service/caps/caps_types.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/ipc_helpers.h" #include "video_core/renderer_base.h" @@ -16,10 +17,10 @@ IScreenShotApplicationService::IScreenShotApplicationService( : ServiceFramework{system_, "caps:su"}, manager{album_manager} { // clang-format off static const FunctionInfo functions[] = { - {32, &IScreenShotApplicationService::SetShimLibraryVersion, "SetShimLibraryVersion"}, + {32, C<&IScreenShotApplicationService::SetShimLibraryVersion>, "SetShimLibraryVersion"}, {201, nullptr, "SaveScreenShot"}, - {203, &IScreenShotApplicationService::SaveScreenShotEx0, "SaveScreenShotEx0"}, - {205, &IScreenShotApplicationService::SaveScreenShotEx1, "SaveScreenShotEx1"}, + {203, C<&IScreenShotApplicationService::SaveScreenShotEx0>, "SaveScreenShotEx0"}, + {205, C<&IScreenShotApplicationService::SaveScreenShotEx1>, "SaveScreenShotEx1"}, {210, nullptr, "SaveScreenShotEx2"}, }; // clang-format on @@ -29,77 +30,40 @@ IScreenShotApplicationService::IScreenShotApplicationService( IScreenShotApplicationService::~IScreenShotApplicationService() = default; -void IScreenShotApplicationService::SetShimLibraryVersion(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto library_version{rp.Pop<u64>()}; - const auto applet_resource_user_id{rp.Pop<u64>()}; - +Result IScreenShotApplicationService::SetShimLibraryVersion(ShimLibraryVersion library_version, + ClientAppletResourceUserId aruid) { LOG_WARNING(Service_Capture, "(STUBBED) called. library_version={}, applet_resource_user_id={}", - library_version, applet_resource_user_id); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + library_version, aruid.pid); + R_SUCCEED(); } -void IScreenShotApplicationService::SaveScreenShotEx0(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - struct Parameters { - ScreenShotAttribute attribute{}; - AlbumReportOption report_option{}; - INSERT_PADDING_BYTES(0x4); - u64 applet_resource_user_id{}; - }; - static_assert(sizeof(Parameters) == 0x50, "Parameters has incorrect size."); - - const auto parameters{rp.PopRaw<Parameters>()}; - const auto image_data_buffer = ctx.ReadBuffer(); - +Result IScreenShotApplicationService::SaveScreenShotEx0( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, + AlbumReportOption report_option, ClientAppletResourceUserId aruid, + InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer) { LOG_INFO(Service_Capture, "called, report_option={}, image_data_buffer_size={}, applet_resource_user_id={}", - parameters.report_option, image_data_buffer.size(), - parameters.applet_resource_user_id); + report_option, image_data_buffer.size(), aruid.pid); - ApplicationAlbumEntry entry{}; manager->FlipVerticallyOnWrite(false); - const auto result = - manager->SaveScreenShot(entry, parameters.attribute, parameters.report_option, - image_data_buffer, parameters.applet_resource_user_id); - - IPC::ResponseBuilder rb{ctx, 10}; - rb.Push(result); - rb.PushRaw(entry); + R_RETURN(manager->SaveScreenShot(*out_entry, attribute, report_option, image_data_buffer, + aruid.pid)); } -void IScreenShotApplicationService::SaveScreenShotEx1(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - struct Parameters { - ScreenShotAttribute attribute{}; - AlbumReportOption report_option{}; - INSERT_PADDING_BYTES(0x4); - u64 applet_resource_user_id{}; - }; - static_assert(sizeof(Parameters) == 0x50, "Parameters has incorrect size."); - - const auto parameters{rp.PopRaw<Parameters>()}; - const auto app_data_buffer = ctx.ReadBuffer(0); - const auto image_data_buffer = ctx.ReadBuffer(1); - +Result IScreenShotApplicationService::SaveScreenShotEx1( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, + AlbumReportOption report_option, ClientAppletResourceUserId aruid, + const InLargeData<ApplicationData, BufferAttr_HipcMapAlias> app_data_buffer, + const InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer) { LOG_INFO(Service_Capture, "called, report_option={}, image_data_buffer_size={}, applet_resource_user_id={}", - parameters.report_option, image_data_buffer.size(), - parameters.applet_resource_user_id); + report_option, image_data_buffer.size(), aruid.pid); - ApplicationAlbumEntry entry{}; - ApplicationData app_data{}; - std::memcpy(&app_data, app_data_buffer.data(), sizeof(ApplicationData)); manager->FlipVerticallyOnWrite(false); - const auto result = - manager->SaveScreenShot(entry, parameters.attribute, parameters.report_option, app_data, - image_data_buffer, parameters.applet_resource_user_id); - - IPC::ResponseBuilder rb{ctx, 10}; - rb.Push(result); - rb.PushRaw(entry); + R_RETURN(manager->SaveScreenShot(*out_entry, attribute, report_option, *app_data_buffer, + image_data_buffer, aruid.pid)); } void IScreenShotApplicationService::CaptureAndSaveScreenshot(AlbumReportOption report_option) { @@ -112,6 +76,7 @@ void IScreenShotApplicationService::CaptureAndSaveScreenshot(AlbumReportOption r .orientation = Capture::AlbumImageOrientation::None, .unknown_1{}, .unknown_2{}, + .pad163{}, }; renderer.RequestScreenshot( diff --git a/src/core/hle/service/caps/caps_su.h b/src/core/hle/service/caps/caps_su.h index 21912e95f..4b4cbd09e 100644 --- a/src/core/hle/service/caps/caps_su.h +++ b/src/core/hle/service/caps/caps_su.h @@ -3,6 +3,8 @@ #pragma once +#include "core/hle/service/caps/caps_types.h" +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Core { @@ -26,9 +28,19 @@ private: static constexpr std::size_t screenshot_height = 720; static constexpr std::size_t bytes_per_pixel = 4; - void SetShimLibraryVersion(HLERequestContext& ctx); - void SaveScreenShotEx0(HLERequestContext& ctx); - void SaveScreenShotEx1(HLERequestContext& ctx); + Result SetShimLibraryVersion(ShimLibraryVersion library_version, + ClientAppletResourceUserId aruid); + Result SaveScreenShotEx0( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, + AlbumReportOption report_option, ClientAppletResourceUserId aruid, + InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer); + Result SaveScreenShotEx1( + Out<ApplicationAlbumEntry> out_entry, const ScreenShotAttribute& attribute, + AlbumReportOption report_option, ClientAppletResourceUserId aruid, + const InLargeData<ApplicationData, BufferAttr_HipcMapAlias> app_data_buffer, + const InBuffer<BufferAttr_HipcMapTransferAllowsNonSecure | BufferAttr_HipcMapAlias> + image_data_buffer); std::array<u8, screenshot_width * screenshot_height * bytes_per_pixel> image_data; diff --git a/src/core/hle/service/caps/caps_types.h b/src/core/hle/service/caps/caps_types.h index 589ac28d3..3deaaad5b 100644 --- a/src/core/hle/service/caps/caps_types.h +++ b/src/core/hle/service/caps/caps_types.h @@ -41,6 +41,10 @@ enum class ScreenShotDecoderFlag : u64 { EnableBlockSmoothing = 1 << 1, }; +enum class ShimLibraryVersion : u64 { + Version1 = 1, +}; + // This is nn::capsrv::AlbumFileDateTime struct AlbumFileDateTime { s16 year{}; @@ -144,19 +148,23 @@ static_assert(sizeof(ApplicationAlbumFileEntry) == 0x30, "ApplicationAlbumFileEntry has incorrect size."); struct ApplicationData { - std::array<u8, 0x400> data{}; - u32 data_size{}; + std::array<u8, 0x400> data; + u32 data_size; }; static_assert(sizeof(ApplicationData) == 0x404, "ApplicationData is an invalid size"); +static_assert(std::is_trivial_v<ApplicationData>, + "ApplicationData type must be trivially copyable."); struct ScreenShotAttribute { - u32 unknown_0{}; - AlbumImageOrientation orientation{}; - u32 unknown_1{}; - u32 unknown_2{}; - INSERT_PADDING_BYTES(0x30); + u32 unknown_0; + AlbumImageOrientation orientation; + u32 unknown_1; + u32 unknown_2; + INSERT_PADDING_BYTES_NOINIT(0x30); }; static_assert(sizeof(ScreenShotAttribute) == 0x40, "ScreenShotAttribute is an invalid size"); +static_assert(std::is_trivial_v<ScreenShotAttribute>, + "ScreenShotAttribute type must be trivially copyable."); struct ScreenShotDecodeOption { ScreenShotDecoderFlag flags{}; @@ -165,13 +173,15 @@ struct ScreenShotDecodeOption { static_assert(sizeof(ScreenShotDecodeOption) == 0x20, "ScreenShotDecodeOption is an invalid size"); struct LoadAlbumScreenShotImageOutput { - s64 width{}; - s64 height{}; - ScreenShotAttribute attribute{}; - INSERT_PADDING_BYTES(0x400); + s64 width; + s64 height; + ScreenShotAttribute attribute; + INSERT_PADDING_BYTES_NOINIT(0x400); }; static_assert(sizeof(LoadAlbumScreenShotImageOutput) == 0x450, "LoadAlbumScreenShotImageOutput is an invalid size"); +static_assert(std::is_trivial_v<LoadAlbumScreenShotImageOutput>, + "LoadAlbumScreenShotImageOutput type must be trivially copyable."); struct LoadAlbumScreenShotImageOutputForApplication { s64 width{}; diff --git a/src/core/hle/service/caps/caps_u.cpp b/src/core/hle/service/caps/caps_u.cpp index b6b33fb2f..40d4d05fe 100644 --- a/src/core/hle/service/caps/caps_u.cpp +++ b/src/core/hle/service/caps/caps_u.cpp @@ -5,6 +5,7 @@ #include "core/hle/service/caps/caps_manager.h" #include "core/hle/service/caps/caps_types.h" #include "core/hle/service/caps/caps_u.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/ipc_helpers.h" namespace Service::Capture { @@ -14,8 +15,8 @@ IAlbumApplicationService::IAlbumApplicationService(Core::System& system_, : ServiceFramework{system_, "caps:u"}, manager{album_manager} { // clang-format off static const FunctionInfo functions[] = { - {32, &IAlbumApplicationService::SetShimLibraryVersion, "SetShimLibraryVersion"}, - {102, &IAlbumApplicationService::GetAlbumFileList0AafeAruidDeprecated, "GetAlbumFileList0AafeAruidDeprecated"}, + {32, C<&IAlbumApplicationService::SetShimLibraryVersion>, "SetShimLibraryVersion"}, + {102, C<&IAlbumApplicationService::GetAlbumFileList0AafeAruidDeprecated>, "GetAlbumFileList0AafeAruidDeprecated"}, {103, nullptr, "DeleteAlbumFileByAruid"}, {104, nullptr, "GetAlbumFileSizeByAruid"}, {105, nullptr, "DeleteAlbumFileByAruidForDebug"}, @@ -24,7 +25,7 @@ IAlbumApplicationService::IAlbumApplicationService(Core::System& system_, {130, nullptr, "PrecheckToCreateContentsByAruid"}, {140, nullptr, "GetAlbumFileList1AafeAruidDeprecated"}, {141, nullptr, "GetAlbumFileList2AafeUidAruidDeprecated"}, - {142, &IAlbumApplicationService::GetAlbumFileList3AaeAruid, "GetAlbumFileList3AaeAruid"}, + {142, C<&IAlbumApplicationService::GetAlbumFileList3AaeAruid>, "GetAlbumFileList3AaeAruid"}, {143, nullptr, "GetAlbumFileList4AaeUidAruid"}, {144, nullptr, "GetAllAlbumFileList3AaeAruid"}, {60002, nullptr, "OpenAccessorSessionForApplication"}, @@ -36,101 +37,40 @@ IAlbumApplicationService::IAlbumApplicationService(Core::System& system_, IAlbumApplicationService::~IAlbumApplicationService() = default; -void IAlbumApplicationService::SetShimLibraryVersion(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto library_version{rp.Pop<u64>()}; - const auto applet_resource_user_id{rp.Pop<u64>()}; - +Result IAlbumApplicationService::SetShimLibraryVersion(ShimLibraryVersion library_version, + ClientAppletResourceUserId aruid) { LOG_WARNING(Service_Capture, "(STUBBED) called. library_version={}, applet_resource_user_id={}", - library_version, applet_resource_user_id); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + library_version, aruid.pid); + R_SUCCEED(); } -void IAlbumApplicationService::GetAlbumFileList0AafeAruidDeprecated(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - struct Parameters { - ContentType content_type; - INSERT_PADDING_BYTES(7); - s64 start_posix_time; - s64 end_posix_time; - u64 applet_resource_user_id; - }; - static_assert(sizeof(Parameters) == 0x20, "Parameters has incorrect size."); - - const auto parameters{rp.PopRaw<Parameters>()}; - +Result IAlbumApplicationService::GetAlbumFileList0AafeAruidDeprecated( + Out<u64> out_entries_count, ContentType content_type, s64 start_posix_time, s64 end_posix_time, + ClientAppletResourceUserId aruid, + OutArray<ApplicationAlbumFileEntry, BufferAttr_HipcMapAlias> out_entries) { LOG_WARNING(Service_Capture, "(STUBBED) called. content_type={}, start_posix_time={}, end_posix_time={}, " "applet_resource_user_id={}", - parameters.content_type, parameters.start_posix_time, parameters.end_posix_time, - parameters.applet_resource_user_id); - - Result result = ResultSuccess; - - if (result.IsSuccess()) { - result = manager->IsAlbumMounted(AlbumStorage::Sd); - } - - std::vector<ApplicationAlbumFileEntry> entries; - if (result.IsSuccess()) { - result = manager->GetAlbumFileList(entries, parameters.content_type, - parameters.start_posix_time, parameters.end_posix_time, - parameters.applet_resource_user_id); - } + content_type, start_posix_time, end_posix_time, aruid.pid); - if (!entries.empty()) { - ctx.WriteBuffer(entries); - } - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(result); - rb.Push<u64>(entries.size()); + R_TRY(manager->IsAlbumMounted(AlbumStorage::Sd)); + R_RETURN(manager->GetAlbumFileList(out_entries, *out_entries_count, content_type, + start_posix_time, end_posix_time, aruid.pid)); } -void IAlbumApplicationService::GetAlbumFileList3AaeAruid(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - struct Parameters { - ContentType content_type; - INSERT_PADDING_BYTES(1); - AlbumFileDateTime start_date_time; - AlbumFileDateTime end_date_time; - INSERT_PADDING_BYTES(6); - u64 applet_resource_user_id; - }; - static_assert(sizeof(Parameters) == 0x20, "Parameters has incorrect size."); - - const auto parameters{rp.PopRaw<Parameters>()}; - +Result IAlbumApplicationService::GetAlbumFileList3AaeAruid( + Out<u64> out_entries_count, ContentType content_type, AlbumFileDateTime start_date_time, + AlbumFileDateTime end_date_time, ClientAppletResourceUserId aruid, + OutArray<ApplicationAlbumEntry, BufferAttr_HipcMapAlias> out_entries) { LOG_WARNING(Service_Capture, "(STUBBED) called. content_type={}, start_date={}/{}/{}, " "end_date={}/{}/{}, applet_resource_user_id={}", - parameters.content_type, parameters.start_date_time.year, - parameters.start_date_time.month, parameters.start_date_time.day, - parameters.end_date_time.year, parameters.end_date_time.month, - parameters.end_date_time.day, parameters.applet_resource_user_id); - - Result result = ResultSuccess; - - if (result.IsSuccess()) { - result = manager->IsAlbumMounted(AlbumStorage::Sd); - } - - std::vector<ApplicationAlbumEntry> entries; - if (result.IsSuccess()) { - result = - manager->GetAlbumFileList(entries, parameters.content_type, parameters.start_date_time, - parameters.end_date_time, parameters.applet_resource_user_id); - } - - if (!entries.empty()) { - ctx.WriteBuffer(entries); - } + content_type, start_date_time.year, start_date_time.month, start_date_time.day, + end_date_time.year, end_date_time.month, end_date_time.day, aruid.pid); - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(result); - rb.Push<u64>(entries.size()); + R_TRY(manager->IsAlbumMounted(AlbumStorage::Sd)); + R_RETURN(manager->GetAlbumFileList(out_entries, *out_entries_count, content_type, + start_date_time, end_date_time, aruid.pid)); } } // namespace Service::Capture diff --git a/src/core/hle/service/caps/caps_u.h b/src/core/hle/service/caps/caps_u.h index 9458c128e..023ee1fe7 100644 --- a/src/core/hle/service/caps/caps_u.h +++ b/src/core/hle/service/caps/caps_u.h @@ -3,6 +3,7 @@ #pragma once +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Core { @@ -19,9 +20,18 @@ public: ~IAlbumApplicationService() override; private: - void SetShimLibraryVersion(HLERequestContext& ctx); - void GetAlbumFileList0AafeAruidDeprecated(HLERequestContext& ctx); - void GetAlbumFileList3AaeAruid(HLERequestContext& ctx); + Result SetShimLibraryVersion(ShimLibraryVersion library_version, + ClientAppletResourceUserId aruid); + + Result GetAlbumFileList0AafeAruidDeprecated( + Out<u64> out_entries_count, ContentType content_type, s64 start_posix_time, + s64 end_posix_time, ClientAppletResourceUserId aruid, + OutArray<ApplicationAlbumFileEntry, BufferAttr_HipcMapAlias> out_entries); + + Result GetAlbumFileList3AaeAruid( + Out<u64> out_entries_count, ContentType content_type, AlbumFileDateTime start_date_time, + AlbumFileDateTime end_date_time, ClientAppletResourceUserId aruid, + OutArray<ApplicationAlbumEntry, BufferAttr_HipcMapAlias> out_entries); std::shared_ptr<AlbumManager> manager = nullptr; }; diff --git a/src/core/hle/service/cmif_serialization.h b/src/core/hle/service/cmif_serialization.h index 9ee26400d..315475e71 100644 --- a/src/core/hle/service/cmif_serialization.h +++ b/src/core/hle/service/cmif_serialization.h @@ -122,14 +122,14 @@ struct RequestLayout { u32 domain_interface_count; }; -template <ArgumentType Type1, ArgumentType Type2, typename MethodArguments, size_t PrevAlign = 1, size_t DataOffset = 0, size_t ArgIndex = 0> -constexpr u32 GetArgumentRawDataSize() { +template <typename MethodArguments, size_t PrevAlign = 1, size_t DataOffset = 0, size_t ArgIndex = 0> +constexpr u32 GetInRawDataSize() { if constexpr (ArgIndex >= std::tuple_size_v<MethodArguments>) { return static_cast<u32>(DataOffset); } else { using ArgType = std::tuple_element_t<ArgIndex, MethodArguments>; - if constexpr (ArgumentTraits<ArgType>::Type == Type1 || ArgumentTraits<ArgType>::Type == Type2) { + if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InData || ArgumentTraits<ArgType>::Type == ArgumentType::InProcessId) { constexpr size_t ArgAlign = alignof(ArgType); constexpr size_t ArgSize = sizeof(ArgType); @@ -138,9 +138,33 @@ constexpr u32 GetArgumentRawDataSize() { constexpr size_t ArgOffset = Common::AlignUp(DataOffset, ArgAlign); constexpr size_t ArgEnd = ArgOffset + ArgSize; - return GetArgumentRawDataSize<Type1, Type2, MethodArguments, ArgAlign, ArgEnd, ArgIndex + 1>(); + return GetInRawDataSize<MethodArguments, ArgAlign, ArgEnd, ArgIndex + 1>(); + } else { + return GetInRawDataSize<MethodArguments, PrevAlign, DataOffset, ArgIndex + 1>(); + } + } +} + +template <typename MethodArguments, size_t PrevAlign = 1, size_t DataOffset = 0, size_t ArgIndex = 0> +constexpr u32 GetOutRawDataSize() { + if constexpr (ArgIndex >= std::tuple_size_v<MethodArguments>) { + return static_cast<u32>(DataOffset); + } else { + using ArgType = std::tuple_element_t<ArgIndex, MethodArguments>; + + if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutData) { + using RawArgType = typename ArgType::Type; + constexpr size_t ArgAlign = alignof(RawArgType); + constexpr size_t ArgSize = sizeof(RawArgType); + + static_assert(PrevAlign <= ArgAlign, "Output argument is not ordered by alignment"); + + constexpr size_t ArgOffset = Common::AlignUp(DataOffset, ArgAlign); + constexpr size_t ArgEnd = ArgOffset + ArgSize; + + return GetOutRawDataSize<MethodArguments, ArgAlign, ArgEnd, ArgIndex + 1>(); } else { - return GetArgumentRawDataSize<Type1, Type2, MethodArguments, PrevAlign, DataOffset, ArgIndex + 1>(); + return GetOutRawDataSize<MethodArguments, PrevAlign, DataOffset, ArgIndex + 1>(); } } } @@ -165,7 +189,7 @@ constexpr RequestLayout GetNonDomainReplyInLayout() { return RequestLayout{ .copy_handle_count = GetArgumentTypeCount<ArgumentType::InCopyHandle, MethodArguments>(), .move_handle_count = 0, - .cmif_raw_data_size = GetArgumentRawDataSize<ArgumentType::InData, ArgumentType::InProcessId, MethodArguments>(), + .cmif_raw_data_size = GetInRawDataSize<MethodArguments>(), .domain_interface_count = 0, }; } @@ -175,7 +199,7 @@ constexpr RequestLayout GetDomainReplyInLayout() { return RequestLayout{ .copy_handle_count = GetArgumentTypeCount<ArgumentType::InCopyHandle, MethodArguments>(), .move_handle_count = 0, - .cmif_raw_data_size = GetArgumentRawDataSize<ArgumentType::InData, ArgumentType::InProcessId, MethodArguments>(), + .cmif_raw_data_size = GetInRawDataSize<MethodArguments>(), .domain_interface_count = GetArgumentTypeCount<ArgumentType::InInterface, MethodArguments>(), }; } @@ -185,7 +209,7 @@ constexpr RequestLayout GetNonDomainReplyOutLayout() { return RequestLayout{ .copy_handle_count = GetArgumentTypeCount<ArgumentType::OutCopyHandle, MethodArguments>(), .move_handle_count = GetArgumentTypeCount<ArgumentType::OutMoveHandle, MethodArguments>() + GetArgumentTypeCount<ArgumentType::OutInterface, MethodArguments>(), - .cmif_raw_data_size = GetArgumentRawDataSize<ArgumentType::OutData, ArgumentType::OutData, MethodArguments>(), + .cmif_raw_data_size = GetOutRawDataSize<MethodArguments>(), .domain_interface_count = 0, }; } @@ -195,7 +219,7 @@ constexpr RequestLayout GetDomainReplyOutLayout() { return RequestLayout{ .copy_handle_count = GetArgumentTypeCount<ArgumentType::OutCopyHandle, MethodArguments>(), .move_handle_count = GetArgumentTypeCount<ArgumentType::OutMoveHandle, MethodArguments>(), - .cmif_raw_data_size = GetArgumentRawDataSize<ArgumentType::OutData, ArgumentType::OutData, MethodArguments>(), + .cmif_raw_data_size = GetOutRawDataSize<MethodArguments>(), .domain_interface_count = GetArgumentTypeCount<ArgumentType::OutInterface, MethodArguments>(), }; } @@ -259,7 +283,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex + 1, InBufferIndex, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InLargeData) { - constexpr size_t BufferSize = sizeof(ArgType); + constexpr size_t BufferSize = sizeof(typename ArgType::Type); // Clear the existing data. std::memset(&std::get<ArgIndex>(args), 0, BufferSize); @@ -300,7 +324,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex, InBufferIndex + 1, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) { - constexpr size_t BufferSize = sizeof(ArgType); + constexpr size_t BufferSize = sizeof(typename ArgType::Type); // Clear the existing data. std::memset(&std::get<ArgIndex>(args).raw, 0, BufferSize); @@ -337,13 +361,15 @@ void WriteOutArgument(bool is_domain, CallArguments& args, u8* raw_data, HLERequ using ArgType = std::tuple_element_t<ArgIndex, MethodArguments>; if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutData) { - constexpr size_t ArgAlign = alignof(ArgType); - constexpr size_t ArgSize = sizeof(ArgType); + using RawArgType = decltype(std::get<ArgIndex>(args).raw); + constexpr size_t ArgAlign = alignof(RawArgType); + constexpr size_t ArgSize = sizeof(RawArgType); static_assert(PrevAlign <= ArgAlign, "Output argument is not ordered by alignment"); static_assert(!RawDataFinished, "All output interface arguments must appear after raw data"); static_assert(!std::is_pointer_v<ArgType>, "Output raw data must not be a pointer"); - static_assert(std::is_trivially_copyable_v<decltype(std::get<ArgIndex>(args).raw)>, "Output raw data must be trivially copyable"); + static_assert(!std::is_pointer_v<RawArgType>, "Output raw data must not be a pointer"); + static_assert(std::is_trivially_copyable_v<RawArgType>, "Output raw data must be trivially copyable"); constexpr size_t ArgOffset = Common::AlignUp(DataOffset, ArgAlign); constexpr size_t ArgEnd = ArgOffset + ArgSize; @@ -368,7 +394,7 @@ void WriteOutArgument(bool is_domain, CallArguments& args, u8* raw_data, HLERequ return WriteOutArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) { - constexpr size_t BufferSize = sizeof(ArgType); + constexpr size_t BufferSize = sizeof(typename ArgType::Type); ASSERT(ctx.CanWriteBuffer(OutBufferIndex)); if constexpr (ArgType::Attr & BufferAttr_HipcAutoSelect) { diff --git a/src/core/hle/service/event.cpp b/src/core/hle/service/event.cpp new file mode 100644 index 000000000..375660d72 --- /dev/null +++ b/src/core/hle/service/event.cpp @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/kernel/k_event.h" +#include "core/hle/service/event.h" +#include "core/hle/service/kernel_helpers.h" + +namespace Service { + +Event::Event(KernelHelpers::ServiceContext& ctx) { + m_event = ctx.CreateEvent("Event"); +} + +Event::~Event() { + m_event->GetReadableEvent().Close(); + m_event->Close(); +} + +void Event::Signal() { + m_event->Signal(); +} + +void Event::Clear() { + m_event->Clear(); +} + +Kernel::KReadableEvent* Event::GetHandle() { + return &m_event->GetReadableEvent(); +} + +} // namespace Service diff --git a/src/core/hle/service/event.h b/src/core/hle/service/event.h new file mode 100644 index 000000000..cdbc4635a --- /dev/null +++ b/src/core/hle/service/event.h @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +namespace Kernel { +class KEvent; +class KReadableEvent; +} // namespace Kernel + +namespace Service { + +namespace KernelHelpers { +class ServiceContext; +} + +class Event { +public: + explicit Event(KernelHelpers::ServiceContext& ctx); + ~Event(); + + void Signal(); + void Clear(); + + Kernel::KReadableEvent* GetHandle(); + +private: + Kernel::KEvent* m_event; +}; + +} // namespace Service diff --git a/src/core/hle/service/filesystem/fsp/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp/fsp_srv.cpp index 2be72b021..5fe534c73 100644 --- a/src/core/hle/service/filesystem/fsp/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp/fsp_srv.cpp @@ -15,11 +15,13 @@ #include "common/settings.h" #include "common/string_util.h" #include "core/core.h" +#include "core/file_sys/content_archive.h" #include "core/file_sys/errors.h" #include "core/file_sys/fs_directory.h" #include "core/file_sys/fs_filesystem.h" #include "core/file_sys/nca_metadata.h" #include "core/file_sys/patch_manager.h" +#include "core/file_sys/romfs.h" #include "core/file_sys/romfs_factory.h" #include "core/file_sys/savedata_factory.h" #include "core/file_sys/system_archive/system_archive.h" @@ -33,18 +35,20 @@ #include "core/hle/service/filesystem/save_data_controller.h" #include "core/hle/service/hle_ipc.h" #include "core/hle/service/ipc_helpers.h" +#include "core/loader/loader.h" #include "core/reporter.h" namespace Service::FileSystem { -enum class FileSystemType : u8 { - Invalid0 = 0, - Invalid1 = 1, +enum class FileSystemProxyType : u8 { + Code = 0, + Rom = 1, Logo = 2, - ContentControl = 3, - ContentManual = 4, - ContentMeta = 5, - ContentData = 6, - ApplicationPackage = 7, + Control = 3, + Manual = 4, + Meta = 5, + Data = 6, + Package = 7, + RegisteredUpdate = 8, }; class ISaveDataInfoReader final : public ServiceFramework<ISaveDataInfoReader> { @@ -357,12 +361,30 @@ void FSP_SRV::SetCurrentProcess(HLERequestContext& ctx) { void FSP_SRV::OpenFileSystemWithPatch(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; - const auto type = rp.PopRaw<FileSystemType>(); - const auto title_id = rp.PopRaw<u64>(); - LOG_WARNING(Service_FS, "(STUBBED) called with type={}, title_id={:016X}", type, title_id); + struct InputParameters { + FileSystemProxyType type; + u64 program_id; + }; + static_assert(sizeof(InputParameters) == 0x10, "InputParameters has wrong size"); + + const auto params = rp.PopRaw<InputParameters>(); + LOG_ERROR(Service_FS, "(STUBBED) called with type={}, program_id={:016X}", params.type, + params.program_id); + + // FIXME: many issues with this + ASSERT(params.type == FileSystemProxyType::Manual); + const auto manual_romfs = romfs_controller->OpenPatchedRomFS( + params.program_id, FileSys::ContentRecordType::HtmlDocument); - IPC::ResponseBuilder rb{ctx, 2, 0, 0}; - rb.Push(ResultUnknown); + ASSERT(manual_romfs != nullptr); + + const auto extracted_romfs = FileSys::ExtractRomFS(manual_romfs); + ASSERT(extracted_romfs != nullptr); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface<IFileSystem>(system, extracted_romfs, + SizeGetter::FromStorageId(fsc, FileSys::StorageId::NandUser)); } void FSP_SRV::OpenSdCardFileSystem(HLERequestContext& ctx) { diff --git a/src/core/hle/service/glue/glue.cpp b/src/core/hle/service/glue/glue.cpp index 10376bfac..ea2843462 100644 --- a/src/core/hle/service/glue/glue.cpp +++ b/src/core/hle/service/glue/glue.cpp @@ -31,8 +31,11 @@ void LoopProcess(Core::System& system) { // Error Context server_manager->RegisterNamedService("ectx:aw", std::make_shared<ECTX_AW>(system)); - // Notification Services for application - server_manager->RegisterNamedService("notif:a", std::make_shared<NOTIF_A>(system)); + // Notification Services + server_manager->RegisterNamedService( + "notif:a", std::make_shared<INotificationServicesForApplication>(system)); + server_manager->RegisterNamedService("notif:s", + std::make_shared<INotificationServices>(system)); // Time auto time = std::make_shared<Time::TimeManager>(system); diff --git a/src/core/hle/service/glue/notif.cpp b/src/core/hle/service/glue/notif.cpp index fec4ad86c..5a03d34c1 100644 --- a/src/core/hle/service/glue/notif.cpp +++ b/src/core/hle/service/glue/notif.cpp @@ -6,48 +6,31 @@ #include "common/assert.h" #include "common/logging/log.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/glue/notif.h" #include "core/hle/service/ipc_helpers.h" +#include "core/hle/service/kernel_helpers.h" namespace Service::Glue { -NOTIF_A::NOTIF_A(Core::System& system_) : ServiceFramework{system_, "notif:a"} { - // clang-format off - static const FunctionInfo functions[] = { - {500, &NOTIF_A::RegisterAlarmSetting, "RegisterAlarmSetting"}, - {510, &NOTIF_A::UpdateAlarmSetting, "UpdateAlarmSetting"}, - {520, &NOTIF_A::ListAlarmSettings, "ListAlarmSettings"}, - {530, &NOTIF_A::LoadApplicationParameter, "LoadApplicationParameter"}, - {540, &NOTIF_A::DeleteAlarmSetting, "DeleteAlarmSetting"}, - {1000, &NOTIF_A::Initialize, "Initialize"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -NOTIF_A::~NOTIF_A() = default; +namespace { -void NOTIF_A::RegisterAlarmSetting(HLERequestContext& ctx) { - const auto alarm_setting_buffer_size = ctx.GetReadBufferSize(0); - const auto application_parameter_size = ctx.GetReadBufferSize(1); - - ASSERT_MSG(alarm_setting_buffer_size == sizeof(AlarmSetting), - "alarm_setting_buffer_size is not 0x40 bytes"); - ASSERT_MSG(application_parameter_size <= sizeof(ApplicationParameter), - "application_parameter_size is bigger than 0x400 bytes"); +constexpr inline std::size_t MaxAlarms = 8; - AlarmSetting new_alarm{}; - memcpy(&new_alarm, ctx.ReadBuffer(0).data(), sizeof(AlarmSetting)); +} - // TODO: Count alarms per game id - if (alarms.size() >= max_alarms) { +Result NotificationServiceImpl::RegisterAlarmSetting(AlarmSettingId* out_alarm_setting_id, + const AlarmSetting& alarm_setting, + std::span<const u8> application_parameter) { + if (alarms.size() > MaxAlarms) { LOG_ERROR(Service_NOTIF, "Alarm limit reached"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; + R_THROW(ResultUnknown); } + ASSERT_MSG(application_parameter.size() <= sizeof(ApplicationParameter), + "application_parameter_size is bigger than 0x400 bytes"); + + AlarmSetting new_alarm = alarm_setting; new_alarm.alarm_setting_id = last_alarm_setting_id++; alarms.push_back(new_alarm); @@ -55,100 +38,82 @@ void NOTIF_A::RegisterAlarmSetting(HLERequestContext& ctx) { LOG_WARNING(Service_NOTIF, "(STUBBED) called, application_parameter_size={}, setting_id={}, kind={}, muted={}", - application_parameter_size, new_alarm.alarm_setting_id, new_alarm.kind, + application_parameter.size(), new_alarm.alarm_setting_id, new_alarm.kind, new_alarm.muted); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - rb.Push(new_alarm.alarm_setting_id); + *out_alarm_setting_id = new_alarm.alarm_setting_id; + R_SUCCEED(); } -void NOTIF_A::UpdateAlarmSetting(HLERequestContext& ctx) { - const auto alarm_setting_buffer_size = ctx.GetReadBufferSize(0); - const auto application_parameter_size = ctx.GetReadBufferSize(1); - - ASSERT_MSG(alarm_setting_buffer_size == sizeof(AlarmSetting), - "alarm_setting_buffer_size is not 0x40 bytes"); - ASSERT_MSG(application_parameter_size <= sizeof(ApplicationParameter), +Result NotificationServiceImpl::UpdateAlarmSetting(const AlarmSetting& alarm_setting, + std::span<const u8> application_parameter) { + ASSERT_MSG(application_parameter.size() <= sizeof(ApplicationParameter), "application_parameter_size is bigger than 0x400 bytes"); - AlarmSetting alarm_setting{}; - memcpy(&alarm_setting, ctx.ReadBuffer(0).data(), sizeof(AlarmSetting)); - const auto alarm_it = GetAlarmFromId(alarm_setting.alarm_setting_id); if (alarm_it != alarms.end()) { LOG_DEBUG(Service_NOTIF, "Alarm updated"); *alarm_it = alarm_setting; - // TODO: Save application parameter data } LOG_WARNING(Service_NOTIF, "(STUBBED) called, application_parameter_size={}, setting_id={}, kind={}, muted={}", - application_parameter_size, alarm_setting.alarm_setting_id, alarm_setting.kind, + application_parameter.size(), alarm_setting.alarm_setting_id, alarm_setting.kind, alarm_setting.muted); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + R_SUCCEED(); } -void NOTIF_A::ListAlarmSettings(HLERequestContext& ctx) { +Result NotificationServiceImpl::ListAlarmSettings(s32* out_count, + std::span<AlarmSetting> out_alarms) { LOG_INFO(Service_NOTIF, "called, alarm_count={}", alarms.size()); - // TODO: Only return alarms of this game id - ctx.WriteBuffer(alarms); + const auto count = std::min(out_alarms.size(), alarms.size()); + for (size_t i = 0; i < count; i++) { + out_alarms[i] = alarms[i]; + } - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.Push(static_cast<u32>(alarms.size())); + *out_count = static_cast<s32>(count); + R_SUCCEED(); } -void NOTIF_A::LoadApplicationParameter(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto alarm_setting_id{rp.Pop<AlarmSettingId>()}; - +Result NotificationServiceImpl::LoadApplicationParameter(u32* out_size, + std::span<u8> out_application_parameter, + AlarmSettingId alarm_setting_id) { const auto alarm_it = GetAlarmFromId(alarm_setting_id); if (alarm_it == alarms.end()) { LOG_ERROR(Service_NOTIF, "Invalid alarm setting id={}", alarm_setting_id); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; + R_THROW(ResultUnknown); } // TODO: Read application parameter related to this setting id ApplicationParameter application_parameter{}; LOG_WARNING(Service_NOTIF, "(STUBBED) called, alarm_setting_id={}", alarm_setting_id); + std::memcpy(out_application_parameter.data(), application_parameter.data(), + std::min(sizeof(application_parameter), out_application_parameter.size())); - ctx.WriteBuffer(application_parameter); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); - rb.Push(static_cast<u32>(application_parameter.size())); + *out_size = static_cast<u32>(application_parameter.size()); + R_SUCCEED(); } -void NOTIF_A::DeleteAlarmSetting(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto alarm_setting_id{rp.Pop<AlarmSettingId>()}; - +Result NotificationServiceImpl::DeleteAlarmSetting(AlarmSettingId alarm_setting_id) { std::erase_if(alarms, [alarm_setting_id](const AlarmSetting& alarm) { return alarm.alarm_setting_id == alarm_setting_id; }); LOG_INFO(Service_NOTIF, "called, alarm_setting_id={}", alarm_setting_id); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + R_SUCCEED(); } -void NOTIF_A::Initialize(HLERequestContext& ctx) { +Result NotificationServiceImpl::Initialize(u64 aruid) { // TODO: Load previous alarms from config LOG_WARNING(Service_NOTIF, "(STUBBED) called"); - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + R_SUCCEED(); } -std::vector<NOTIF_A::AlarmSetting>::iterator NOTIF_A::GetAlarmFromId( +std::vector<AlarmSetting>::iterator NotificationServiceImpl::GetAlarmFromId( AlarmSettingId alarm_setting_id) { return std::find_if(alarms.begin(), alarms.end(), [alarm_setting_id](const AlarmSetting& alarm) { @@ -156,4 +121,174 @@ std::vector<NOTIF_A::AlarmSetting>::iterator NOTIF_A::GetAlarmFromId( }); } +INotificationServicesForApplication::INotificationServicesForApplication(Core::System& system_) + : ServiceFramework{system_, "notif:a"} { + // clang-format off + static const FunctionInfo functions[] = { + {500, D<&INotificationServicesForApplication::RegisterAlarmSetting>, "RegisterAlarmSetting"}, + {510, D<&INotificationServicesForApplication::UpdateAlarmSetting>, "UpdateAlarmSetting"}, + {520, D<&INotificationServicesForApplication::ListAlarmSettings>, "ListAlarmSettings"}, + {530, D<&INotificationServicesForApplication::LoadApplicationParameter>, "LoadApplicationParameter"}, + {540, D<&INotificationServicesForApplication::DeleteAlarmSetting>, "DeleteAlarmSetting"}, + {1000, D<&INotificationServicesForApplication::Initialize>, "Initialize"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +INotificationServicesForApplication::~INotificationServicesForApplication() = default; + +Result INotificationServicesForApplication::RegisterAlarmSetting( + Out<AlarmSettingId> out_alarm_setting_id, + InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter) { + R_RETURN(impl.RegisterAlarmSetting(out_alarm_setting_id.Get(), *alarm_setting, + application_parameter)); +} + +Result INotificationServicesForApplication::UpdateAlarmSetting( + InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter) { + R_RETURN(impl.UpdateAlarmSetting(*alarm_setting, application_parameter)); +} + +Result INotificationServicesForApplication::ListAlarmSettings( + Out<s32> out_count, OutArray<AlarmSetting, BufferAttr_HipcMapAlias> out_alarms) { + R_RETURN(impl.ListAlarmSettings(out_count.Get(), out_alarms)); +} + +Result INotificationServicesForApplication::LoadApplicationParameter( + Out<u32> out_size, OutBuffer<BufferAttr_HipcMapAlias> out_application_parameter, + AlarmSettingId alarm_setting_id) { + R_RETURN( + impl.LoadApplicationParameter(out_size.Get(), out_application_parameter, alarm_setting_id)); +} + +Result INotificationServicesForApplication::DeleteAlarmSetting(AlarmSettingId alarm_setting_id) { + R_RETURN(impl.DeleteAlarmSetting(alarm_setting_id)); +} + +Result INotificationServicesForApplication::Initialize(ClientAppletResourceUserId aruid) { + R_RETURN(impl.Initialize(*aruid)); +} + +class INotificationSystemEventAccessor final + : public ServiceFramework<INotificationSystemEventAccessor> { +public: + explicit INotificationSystemEventAccessor(Core::System& system_) + : ServiceFramework{system_, "INotificationSystemEventAccessor"}, + service_context{system_, "INotificationSystemEventAccessor"} { + // clang-format off + static const FunctionInfo functions[] = { + {0, D<&INotificationSystemEventAccessor::GetSystemEvent>, "GetSystemEvent"}, + }; + // clang-format on + + RegisterHandlers(functions); + + notification_event = + service_context.CreateEvent("INotificationSystemEventAccessor:NotificationEvent"); + } + + ~INotificationSystemEventAccessor() { + service_context.CloseEvent(notification_event); + } + +private: + Result GetSystemEvent(OutCopyHandle<Kernel::KReadableEvent> out_readable_event) { + LOG_WARNING(Service_NOTIF, "(STUBBED) called"); + + *out_readable_event = ¬ification_event->GetReadableEvent(); + R_SUCCEED(); + } + + KernelHelpers::ServiceContext service_context; + Kernel::KEvent* notification_event; +}; + +INotificationServices::INotificationServices(Core::System& system_) + : ServiceFramework{system_, "notif:s"} { + // clang-format off + static const FunctionInfo functions[] = { + {500, D<&INotificationServices::RegisterAlarmSetting>, "RegisterAlarmSetting"}, + {510, D<&INotificationServices::UpdateAlarmSetting>, "UpdateAlarmSetting"}, + {520, D<&INotificationServices::ListAlarmSettings>, "ListAlarmSettings"}, + {530, D<&INotificationServices::LoadApplicationParameter>, "LoadApplicationParameter"}, + {540, D<&INotificationServices::DeleteAlarmSetting>, "DeleteAlarmSetting"}, + {1000, D<&INotificationServices::Initialize>, "Initialize"}, + {1010, nullptr, "ListNotifications"}, + {1020, nullptr, "DeleteNotification"}, + {1030, nullptr, "ClearNotifications"}, + {1040, D<&INotificationServices::OpenNotificationSystemEventAccessor>, "OpenNotificationSystemEventAccessor"}, + {1500, nullptr, "SetNotificationPresentationSetting"}, + {1510, D<&INotificationServices::GetNotificationPresentationSetting>, "GetNotificationPresentationSetting"}, + {2000, nullptr, "GetAlarmSetting"}, + {2001, nullptr, "GetAlarmSettingWithApplicationParameter"}, + {2010, nullptr, "MuteAlarmSetting"}, + {2020, nullptr, "IsAlarmSettingReady"}, + {8000, nullptr, "RegisterAppletResourceUserId"}, + {8010, nullptr, "UnregisterAppletResourceUserId"}, + {8999, nullptr, "GetCurrentTime"}, + {9000, nullptr, "GetAlarmSettingNextNotificationTime"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +INotificationServices::~INotificationServices() = default; + +Result INotificationServices::RegisterAlarmSetting( + Out<AlarmSettingId> out_alarm_setting_id, + InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter) { + R_RETURN(impl.RegisterAlarmSetting(out_alarm_setting_id.Get(), *alarm_setting, + application_parameter)); +} + +Result INotificationServices::UpdateAlarmSetting( + InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter) { + R_RETURN(impl.UpdateAlarmSetting(*alarm_setting, application_parameter)); +} + +Result INotificationServices::ListAlarmSettings( + Out<s32> out_count, OutArray<AlarmSetting, BufferAttr_HipcMapAlias> out_alarms) { + R_RETURN(impl.ListAlarmSettings(out_count.Get(), out_alarms)); +} + +Result INotificationServices::LoadApplicationParameter( + Out<u32> out_size, OutBuffer<BufferAttr_HipcMapAlias> out_application_parameter, + AlarmSettingId alarm_setting_id) { + R_RETURN( + impl.LoadApplicationParameter(out_size.Get(), out_application_parameter, alarm_setting_id)); +} + +Result INotificationServices::DeleteAlarmSetting(AlarmSettingId alarm_setting_id) { + R_RETURN(impl.DeleteAlarmSetting(alarm_setting_id)); +} + +Result INotificationServices::Initialize(ClientAppletResourceUserId aruid) { + R_RETURN(impl.Initialize(*aruid)); +} + +Result INotificationServices::OpenNotificationSystemEventAccessor( + Out<SharedPointer<INotificationSystemEventAccessor>> out_notification_system_event_accessor) { + LOG_WARNING(Service_NOTIF, "(STUBBED) called"); + + *out_notification_system_event_accessor = + std::make_shared<INotificationSystemEventAccessor>(system); + R_SUCCEED(); +} + +Result INotificationServices::GetNotificationPresentationSetting( + Out<NotificationPresentationSetting> out_notification_presentation_setting, + NotificationChannel notification_channel) { + LOG_WARNING(Service_NOTIF, "(STUBBED) called"); + + *out_notification_presentation_setting = {}; + R_SUCCEED(); +} + } // namespace Service::Glue diff --git a/src/core/hle/service/glue/notif.h b/src/core/hle/service/glue/notif.h index b1187f3a3..ef2522fdf 100644 --- a/src/core/hle/service/glue/notif.h +++ b/src/core/hle/service/glue/notif.h @@ -7,6 +7,7 @@ #include <vector> #include "common/uuid.h" +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Core { @@ -15,58 +16,117 @@ class System; namespace Service::Glue { -class NOTIF_A final : public ServiceFramework<NOTIF_A> { +// This is nn::notification::AlarmSettingId +using AlarmSettingId = u16; +static_assert(sizeof(AlarmSettingId) == 0x2, "AlarmSettingId is an invalid size"); + +using ApplicationParameter = std::array<u8, 0x400>; +static_assert(sizeof(ApplicationParameter) == 0x400, "ApplicationParameter is an invalid size"); + +struct DailyAlarmSetting { + s8 hour; + s8 minute; +}; +static_assert(sizeof(DailyAlarmSetting) == 0x2, "DailyAlarmSetting is an invalid size"); + +struct WeeklyScheduleAlarmSetting { + INSERT_PADDING_BYTES_NOINIT(0xA); + std::array<DailyAlarmSetting, 0x7> day_of_week; +}; +static_assert(sizeof(WeeklyScheduleAlarmSetting) == 0x18, + "WeeklyScheduleAlarmSetting is an invalid size"); + +// This is nn::notification::AlarmSetting +struct AlarmSetting { + AlarmSettingId alarm_setting_id; + u8 kind; + u8 muted; + INSERT_PADDING_BYTES_NOINIT(0x4); + Common::UUID account_id; + u64 application_id; + INSERT_PADDING_BYTES_NOINIT(0x8); + WeeklyScheduleAlarmSetting schedule; +}; +static_assert(sizeof(AlarmSetting) == 0x40, "AlarmSetting is an invalid size"); + +enum class NotificationChannel : u8 { + Unknown0 = 0, +}; + +struct NotificationPresentationSetting { + INSERT_PADDING_BYTES_NOINIT(0x10); +}; +static_assert(sizeof(NotificationPresentationSetting) == 0x10, + "NotificationPresentationSetting is an invalid size"); + +class NotificationServiceImpl { public: - explicit NOTIF_A(Core::System& system_); - ~NOTIF_A() override; + Result RegisterAlarmSetting(AlarmSettingId* out_alarm_setting_id, + const AlarmSetting& alarm_setting, + std::span<const u8> application_parameter); + Result UpdateAlarmSetting(const AlarmSetting& alarm_setting, + std::span<const u8> application_parameter); + Result ListAlarmSettings(s32* out_count, std::span<AlarmSetting> out_alarms); + Result LoadApplicationParameter(u32* out_size, std::span<u8> out_application_parameter, + AlarmSettingId alarm_setting_id); + Result DeleteAlarmSetting(AlarmSettingId alarm_setting_id); + Result Initialize(u64 aruid); private: - static constexpr std::size_t max_alarms = 8; - - // This is nn::notification::AlarmSettingId - using AlarmSettingId = u16; - static_assert(sizeof(AlarmSettingId) == 0x2, "AlarmSettingId is an invalid size"); - - using ApplicationParameter = std::array<u8, 0x400>; - static_assert(sizeof(ApplicationParameter) == 0x400, "ApplicationParameter is an invalid size"); - - struct DailyAlarmSetting { - s8 hour; - s8 minute; - }; - static_assert(sizeof(DailyAlarmSetting) == 0x2, "DailyAlarmSetting is an invalid size"); - - struct WeeklyScheduleAlarmSetting { - INSERT_PADDING_BYTES(0xA); - std::array<DailyAlarmSetting, 0x7> day_of_week; - }; - static_assert(sizeof(WeeklyScheduleAlarmSetting) == 0x18, - "WeeklyScheduleAlarmSetting is an invalid size"); - - // This is nn::notification::AlarmSetting - struct AlarmSetting { - AlarmSettingId alarm_setting_id; - u8 kind; - u8 muted; - INSERT_PADDING_BYTES(0x4); - Common::UUID account_id; - u64 application_id; - INSERT_PADDING_BYTES(0x8); - WeeklyScheduleAlarmSetting schedule; - }; - static_assert(sizeof(AlarmSetting) == 0x40, "AlarmSetting is an invalid size"); - - void RegisterAlarmSetting(HLERequestContext& ctx); - void UpdateAlarmSetting(HLERequestContext& ctx); - void ListAlarmSettings(HLERequestContext& ctx); - void LoadApplicationParameter(HLERequestContext& ctx); - void DeleteAlarmSetting(HLERequestContext& ctx); - void Initialize(HLERequestContext& ctx); - std::vector<AlarmSetting>::iterator GetAlarmFromId(AlarmSettingId alarm_setting_id); - std::vector<AlarmSetting> alarms{}; AlarmSettingId last_alarm_setting_id{}; }; +class INotificationServicesForApplication final + : public ServiceFramework<INotificationServicesForApplication> { +public: + explicit INotificationServicesForApplication(Core::System& system_); + ~INotificationServicesForApplication() override; + +private: + Result RegisterAlarmSetting(Out<AlarmSettingId> out_alarm_setting_id, + InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter); + Result UpdateAlarmSetting(InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter); + Result ListAlarmSettings(Out<s32> out_count, + OutArray<AlarmSetting, BufferAttr_HipcMapAlias> out_alarms); + Result LoadApplicationParameter(Out<u32> out_size, + OutBuffer<BufferAttr_HipcMapAlias> out_application_parameter, + AlarmSettingId alarm_setting_id); + Result DeleteAlarmSetting(AlarmSettingId alarm_setting_id); + Result Initialize(ClientAppletResourceUserId aruid); + + NotificationServiceImpl impl; +}; + +class INotificationSystemEventAccessor; + +class INotificationServices final : public ServiceFramework<INotificationServices> { +public: + explicit INotificationServices(Core::System& system_); + ~INotificationServices() override; + +private: + Result RegisterAlarmSetting(Out<AlarmSettingId> out_alarm_setting_id, + InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter); + Result UpdateAlarmSetting(InLargeData<AlarmSetting, BufferAttr_HipcMapAlias> alarm_setting, + InBuffer<BufferAttr_HipcMapAlias> application_parameter); + Result ListAlarmSettings(Out<s32> out_count, + OutArray<AlarmSetting, BufferAttr_HipcMapAlias> out_alarms); + Result LoadApplicationParameter(Out<u32> out_size, + OutBuffer<BufferAttr_HipcMapAlias> out_application_parameter, + AlarmSettingId alarm_setting_id); + Result DeleteAlarmSetting(AlarmSettingId alarm_setting_id); + Result Initialize(ClientAppletResourceUserId aruid); + Result OpenNotificationSystemEventAccessor(Out<SharedPointer<INotificationSystemEventAccessor>> + out_notification_system_event_accessor); + Result GetNotificationPresentationSetting( + Out<NotificationPresentationSetting> out_notification_presentation_setting, + NotificationChannel notification_channel); + + NotificationServiceImpl impl; +}; } // namespace Service::Glue diff --git a/src/core/hle/service/glue/time/static.cpp b/src/core/hle/service/glue/time/static.cpp index f56db76e1..f8c1218f3 100644 --- a/src/core/hle/service/glue/time/static.cpp +++ b/src/core/hle/service/glue/time/static.cpp @@ -200,7 +200,7 @@ Result StaticService::GetStandardUserSystemClockAutomaticCorrectionUpdatedTime( } Result StaticService::CalculateMonotonicSystemClockBaseTimePoint( - Out<s64> out_time, Service::PSC::Time::SystemClockContext& context) { + Out<s64> out_time, const Service::PSC::Time::SystemClockContext& context) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, "called. context={} out_time={}", context, *out_time); }); R_RETURN(m_wrapped_service->CalculateMonotonicSystemClockBaseTimePoint(out_time, context)); @@ -216,8 +216,8 @@ Result StaticService::GetClockSnapshot(OutClockSnapshot out_snapshot, Result StaticService::GetClockSnapshotFromSystemClockContext( Service::PSC::Time::TimeType type, OutClockSnapshot out_snapshot, - Service::PSC::Time::SystemClockContext& user_context, - Service::PSC::Time::SystemClockContext& network_context) { + const Service::PSC::Time::SystemClockContext& user_context, + const Service::PSC::Time::SystemClockContext& network_context) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, "called. type={} out_snapshot={} user_context={} network_context={}", type, diff --git a/src/core/hle/service/glue/time/static.h b/src/core/hle/service/glue/time/static.h index d3cc0fdd6..5d3623182 100644 --- a/src/core/hle/service/glue/time/static.h +++ b/src/core/hle/service/glue/time/static.h @@ -58,12 +58,12 @@ public: Result GetStandardUserSystemClockAutomaticCorrectionUpdatedTime( Out<Service::PSC::Time::SteadyClockTimePoint> out_time_point); Result CalculateMonotonicSystemClockBaseTimePoint( - Out<s64> out_time, Service::PSC::Time::SystemClockContext& context); + Out<s64> out_time, const Service::PSC::Time::SystemClockContext& context); Result GetClockSnapshot(OutClockSnapshot out_snapshot, Service::PSC::Time::TimeType type); Result GetClockSnapshotFromSystemClockContext( Service::PSC::Time::TimeType type, OutClockSnapshot out_snapshot, - Service::PSC::Time::SystemClockContext& user_context, - Service::PSC::Time::SystemClockContext& network_context); + const Service::PSC::Time::SystemClockContext& user_context, + const Service::PSC::Time::SystemClockContext& network_context); Result CalculateStandardUserSystemClockDifferenceByUser(Out<s64> out_difference, InClockSnapshot a, InClockSnapshot b); Result CalculateSpanBetween(Out<s64> out_time, InClockSnapshot a, InClockSnapshot b); diff --git a/src/core/hle/service/glue/time/time_zone.cpp b/src/core/hle/service/glue/time/time_zone.cpp index 5dc1187cb..36f163419 100644 --- a/src/core/hle/service/glue/time/time_zone.cpp +++ b/src/core/hle/service/glue/time/time_zone.cpp @@ -62,7 +62,8 @@ Result TimeZoneService::GetDeviceLocationName( R_RETURN(m_wrapped_service->GetDeviceLocationName(out_location_name)); } -Result TimeZoneService::SetDeviceLocationName(Service::PSC::Time::LocationName& location_name) { +Result TimeZoneService::SetDeviceLocationName( + const Service::PSC::Time::LocationName& location_name) { LOG_DEBUG(Service_Time, "called. location_name={}", location_name); R_UNLESS(m_can_write_timezone_device_location, Service::PSC::Time::ResultPermissionDenied); @@ -110,7 +111,8 @@ Result TimeZoneService::LoadLocationNameList( R_RETURN(GetTimeZoneLocationList(*out_count, out_names, out_names.size(), index)); } -Result TimeZoneService::LoadTimeZoneRule(OutRule out_rule, Service::PSC::Time::LocationName& name) { +Result TimeZoneService::LoadTimeZoneRule(OutRule out_rule, + const Service::PSC::Time::LocationName& name) { LOG_DEBUG(Service_Time, "called. name={}", name); std::scoped_lock l{m_mutex}; @@ -139,7 +141,8 @@ Result TimeZoneService::GetDeviceLocationNameAndUpdatedTime( } Result TimeZoneService::SetDeviceLocationNameWithTimeZoneRule( - Service::PSC::Time::LocationName& location_name, InBuffer<BufferAttr_HipcAutoSelect> binary) { + const Service::PSC::Time::LocationName& location_name, + InBuffer<BufferAttr_HipcAutoSelect> binary) { LOG_DEBUG(Service_Time, "called. location_name={}", location_name); R_UNLESS(m_can_write_timezone_device_location, Service::PSC::Time::ResultPermissionDenied); @@ -197,32 +200,27 @@ Result TimeZoneService::ToCalendarTimeWithMyRule( Result TimeZoneService::ToPosixTime(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, - Service::PSC::Time::CalendarTime& calendar_time, InRule rule) { + const Service::PSC::Time::CalendarTime& calendar_time, + InRule rule) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, - "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} " - "out_times_count={}", - calendar_time, *out_count, out_times[0], out_times[1], *out_times_count); + "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={}", + calendar_time, *out_count, out_times[0], out_times[1]); }); - R_RETURN( - m_wrapped_service->ToPosixTime(out_count, out_times, out_times_count, calendar_time, rule)); + R_RETURN(m_wrapped_service->ToPosixTime(out_count, out_times, calendar_time, rule)); } -Result TimeZoneService::ToPosixTimeWithMyRule(Out<u32> out_count, - OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, - Service::PSC::Time::CalendarTime& calendar_time) { +Result TimeZoneService::ToPosixTimeWithMyRule( + Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, + const Service::PSC::Time::CalendarTime& calendar_time) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, - "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} " - "out_times_count={}", - calendar_time, *out_count, out_times[0], out_times[1], *out_times_count); + "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={}", + calendar_time, *out_count, out_times[0], out_times[1]); }); - R_RETURN(m_wrapped_service->ToPosixTimeWithMyRule(out_count, out_times, out_times_count, - calendar_time)); + R_RETURN(m_wrapped_service->ToPosixTimeWithMyRule(out_count, out_times, calendar_time)); } } // namespace Service::Glue::Time diff --git a/src/core/hle/service/glue/time/time_zone.h b/src/core/hle/service/glue/time/time_zone.h index bf12adbdc..beb54ddde 100644 --- a/src/core/hle/service/glue/time/time_zone.h +++ b/src/core/hle/service/glue/time/time_zone.h @@ -46,18 +46,20 @@ public: ~TimeZoneService() override; Result GetDeviceLocationName(Out<Service::PSC::Time::LocationName> out_location_name); - Result SetDeviceLocationName(Service::PSC::Time::LocationName& location_name); + Result SetDeviceLocationName(const Service::PSC::Time::LocationName& location_name); Result GetTotalLocationNameCount(Out<u32> out_count); Result LoadLocationNameList( Out<u32> out_count, OutArray<Service::PSC::Time::LocationName, BufferAttr_HipcMapAlias> out_names, u32 index); - Result LoadTimeZoneRule(OutRule out_rule, Service::PSC::Time::LocationName& location_name); + Result LoadTimeZoneRule(OutRule out_rule, + const Service::PSC::Time::LocationName& location_name); Result GetTimeZoneRuleVersion(Out<Service::PSC::Time::RuleVersion> out_rule_version); Result GetDeviceLocationNameAndUpdatedTime( Out<Service::PSC::Time::LocationName> location_name, Out<Service::PSC::Time::SteadyClockTimePoint> out_time_point); - Result SetDeviceLocationNameWithTimeZoneRule(Service::PSC::Time::LocationName& location_name, - InBuffer<BufferAttr_HipcAutoSelect> binary); + Result SetDeviceLocationNameWithTimeZoneRule( + const Service::PSC::Time::LocationName& location_name, + InBuffer<BufferAttr_HipcAutoSelect> binary); Result ParseTimeZoneBinary(OutRule out_rule, InBuffer<BufferAttr_HipcAutoSelect> binary); Result GetDeviceLocationNameOperationEventReadableHandle( OutCopyHandle<Kernel::KReadableEvent> out_event); @@ -68,12 +70,10 @@ public: Out<Service::PSC::Time::CalendarTime> out_calendar_time, Out<Service::PSC::Time::CalendarAdditionalInfo> out_additional_info, s64 time); Result ToPosixTime(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, Service::PSC::Time::CalendarTime& calendar_time, - InRule rule); + const Service::PSC::Time::CalendarTime& calendar_time, InRule rule); Result ToPosixTimeWithMyRule(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, - Service::PSC::Time::CalendarTime& calendar_time); + const Service::PSC::Time::CalendarTime& calendar_time); private: Core::System& m_system; diff --git a/src/core/hle/service/glue/time/time_zone_binary.cpp b/src/core/hle/service/glue/time/time_zone_binary.cpp index cc50b6b7b..d5f7ca3d2 100644 --- a/src/core/hle/service/glue/time/time_zone_binary.cpp +++ b/src/core/hle/service/glue/time/time_zone_binary.cpp @@ -98,7 +98,7 @@ void GetTimeZoneBinaryVersionPath(std::string& out_path) { out_path = "/version.txt"; } -void GetTimeZoneZonePath(std::string& out_path, Service::PSC::Time::LocationName& name) { +void GetTimeZoneZonePath(std::string& out_path, const Service::PSC::Time::LocationName& name) { if (g_time_zone_binary_mount_result != ResultSuccess) { return; } @@ -106,7 +106,7 @@ void GetTimeZoneZonePath(std::string& out_path, Service::PSC::Time::LocationName out_path = fmt::format("/zoneinfo/{}", name.data()); } -bool IsTimeZoneBinaryValid(Service::PSC::Time::LocationName& name) { +bool IsTimeZoneBinaryValid(const Service::PSC::Time::LocationName& name) { std::string path{}; GetTimeZoneZonePath(path, name); @@ -155,7 +155,7 @@ Result GetTimeZoneVersion(Service::PSC::Time::RuleVersion& out_rule_version) { } Result GetTimeZoneRule(std::span<const u8>& out_rule, size_t& out_rule_size, - Service::PSC::Time::LocationName& name) { + const Service::PSC::Time::LocationName& name) { std::string path{}; GetTimeZoneZonePath(path, name); diff --git a/src/core/hle/service/glue/time/time_zone_binary.h b/src/core/hle/service/glue/time/time_zone_binary.h index 461f4577e..9d0a8dfe9 100644 --- a/src/core/hle/service/glue/time/time_zone_binary.h +++ b/src/core/hle/service/glue/time/time_zone_binary.h @@ -19,12 +19,12 @@ void ResetTimeZoneBinary(); Result MountTimeZoneBinary(Core::System& system); void GetTimeZoneBinaryListPath(std::string& out_path); void GetTimeZoneBinaryVersionPath(std::string& out_path); -void GetTimeZoneZonePath(std::string& out_path, Service::PSC::Time::LocationName& name); -bool IsTimeZoneBinaryValid(Service::PSC::Time::LocationName& name); +void GetTimeZoneZonePath(std::string& out_path, const Service::PSC::Time::LocationName& name); +bool IsTimeZoneBinaryValid(const Service::PSC::Time::LocationName& name); u32 GetTimeZoneCount(); Result GetTimeZoneVersion(Service::PSC::Time::RuleVersion& out_rule_version); Result GetTimeZoneRule(std::span<const u8>& out_rule, size_t& out_rule_size, - Service::PSC::Time::LocationName& name); + const Service::PSC::Time::LocationName& name); Result GetTimeZoneLocationList(u32& out_count, std::span<Service::PSC::Time::LocationName> out_names, size_t max_names, u32 index); diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 5b28be577..b60fb9139 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -18,9 +18,10 @@ namespace Service::HID { void LoopProcess(Core::System& system) { auto server_manager = std::make_unique<ServerManager>(system); - std::shared_ptr<ResourceManager> resource_manager = std::make_shared<ResourceManager>(system); std::shared_ptr<HidFirmwareSettings> firmware_settings = std::make_shared<HidFirmwareSettings>(system); + std::shared_ptr<ResourceManager> resource_manager = + std::make_shared<ResourceManager>(system, firmware_settings); // TODO: Remove this hack when am is emulated properly. resource_manager->Initialize(); @@ -31,7 +32,7 @@ void LoopProcess(Core::System& system) { server_manager->RegisterNamedService( "hid", std::make_shared<IHidServer>(system, resource_manager, firmware_settings)); server_manager->RegisterNamedService( - "hid:dbg", std::make_shared<IHidDebugServer>(system, resource_manager)); + "hid:dbg", std::make_shared<IHidDebugServer>(system, resource_manager, firmware_settings)); server_manager->RegisterNamedService( "hid:sys", std::make_shared<IHidSystemServer>(system, resource_manager, firmware_settings)); diff --git a/src/core/hle/service/hid/hid_debug_server.cpp b/src/core/hle/service/hid/hid_debug_server.cpp index f2a767d37..610af34dd 100644 --- a/src/core/hle/service/hid/hid_debug_server.cpp +++ b/src/core/hle/service/hid/hid_debug_server.cpp @@ -1,27 +1,37 @@ // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later +#include <algorithm> + #include "core/hle/service/hid/hid_debug_server.h" #include "core/hle/service/ipc_helpers.h" +#include "hid_core/hid_types.h" #include "hid_core/resource_manager.h" +#include "hid_core/resources/hid_firmware_settings.h" + +#include "hid_core/resources/touch_screen/gesture.h" +#include "hid_core/resources/touch_screen/touch_screen.h" +#include "hid_core/resources/touch_screen/touch_types.h" namespace Service::HID { -IHidDebugServer::IHidDebugServer(Core::System& system_, std::shared_ptr<ResourceManager> resource) - : ServiceFramework{system_, "hid:dbg"}, resource_manager{resource} { +IHidDebugServer::IHidDebugServer(Core::System& system_, std::shared_ptr<ResourceManager> resource, + std::shared_ptr<HidFirmwareSettings> settings) + : ServiceFramework{system_, "hid:dbg"}, resource_manager{resource}, firmware_settings{ + settings} { // clang-format off static const FunctionInfo functions[] = { {0, nullptr, "DeactivateDebugPad"}, {1, nullptr, "SetDebugPadAutoPilotState"}, {2, nullptr, "UnsetDebugPadAutoPilotState"}, - {10, nullptr, "DeactivateTouchScreen"}, - {11, nullptr, "SetTouchScreenAutoPilotState"}, - {12, nullptr, "UnsetTouchScreenAutoPilotState"}, - {13, nullptr, "GetTouchScreenConfiguration"}, - {14, nullptr, "ProcessTouchScreenAutoTune"}, - {15, nullptr, "ForceStopTouchScreenManagement"}, - {16, nullptr, "ForceRestartTouchScreenManagement"}, - {17, nullptr, "IsTouchScreenManaged"}, + {10, &IHidDebugServer::DeactivateTouchScreen, "DeactivateTouchScreen"}, + {11, &IHidDebugServer::SetTouchScreenAutoPilotState, "SetTouchScreenAutoPilotState"}, + {12, &IHidDebugServer::UnsetTouchScreenAutoPilotState, "UnsetTouchScreenAutoPilotState"}, + {13, &IHidDebugServer::GetTouchScreenConfiguration, "GetTouchScreenConfiguration"}, + {14, &IHidDebugServer::ProcessTouchScreenAutoTune, "ProcessTouchScreenAutoTune"}, + {15, &IHidDebugServer::ForceStopTouchScreenManagement, "ForceStopTouchScreenManagement"}, + {16, &IHidDebugServer::ForceRestartTouchScreenManagement, "ForceRestartTouchScreenManagement"}, + {17, &IHidDebugServer::IsTouchScreenManaged, "IsTouchScreenManaged"}, {20, nullptr, "DeactivateMouse"}, {21, nullptr, "SetMouseAutoPilotState"}, {22, nullptr, "UnsetMouseAutoPilotState"}, @@ -37,7 +47,7 @@ IHidDebugServer::IHidDebugServer(Core::System& system_, std::shared_ptr<Resource {60, nullptr, "ClearNpadSystemCommonPolicy"}, {61, nullptr, "DeactivateNpad"}, {62, nullptr, "ForceDisconnectNpad"}, - {91, nullptr, "DeactivateGesture"}, + {91, &IHidDebugServer::DeactivateGesture, "DeactivateGesture"}, {110, nullptr, "DeactivateHomeButton"}, {111, nullptr, "SetHomeButtonAutoPilotState"}, {112, nullptr, "UnsetHomeButtonAutoPilotState"}, @@ -150,6 +160,170 @@ IHidDebugServer::IHidDebugServer(Core::System& system_, std::shared_ptr<Resource } IHidDebugServer::~IHidDebugServer() = default; +void IHidDebugServer::DeactivateTouchScreen(HLERequestContext& ctx) { + LOG_INFO(Service_HID, "called"); + + Result result = ResultSuccess; + + if (!firmware_settings->IsDeviceManaged()) { + result = GetResourceManager()->GetTouchScreen()->Deactivate(); + } + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidDebugServer::SetTouchScreenAutoPilotState(HLERequestContext& ctx) { + AutoPilotState auto_pilot{}; + auto_pilot.count = ctx.GetReadBufferNumElements<TouchState>(); + const auto buffer = ctx.ReadBuffer(); + + auto_pilot.count = std::min(auto_pilot.count, static_cast<u64>(auto_pilot.state.size())); + memcpy(auto_pilot.state.data(), buffer.data(), auto_pilot.count * sizeof(TouchState)); + + LOG_INFO(Service_HID, "called, auto_pilot_count={}", auto_pilot.count); + + const Result result = + GetResourceManager()->GetTouchScreen()->SetTouchScreenAutoPilotState(auto_pilot); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidDebugServer::UnsetTouchScreenAutoPilotState(HLERequestContext& ctx) { + LOG_INFO(Service_HID, "called"); + + const Result result = GetResourceManager()->GetTouchScreen()->UnsetTouchScreenAutoPilotState(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidDebugServer::GetTouchScreenConfiguration(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto applet_resource_user_id{rp.Pop<u64>()}; + + LOG_INFO(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); + + Core::HID::TouchScreenConfigurationForNx touchscreen_config{}; + const Result result = GetResourceManager()->GetTouchScreen()->GetTouchScreenConfiguration( + touchscreen_config, applet_resource_user_id); + + if (touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Heat2 && + touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Finger) { + touchscreen_config.mode = Core::HID::TouchScreenModeForNx::UseSystemSetting; + } + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(result); + rb.PushRaw(touchscreen_config); +} + +void IHidDebugServer::ProcessTouchScreenAutoTune(HLERequestContext& ctx) { + LOG_INFO(Service_HID, "called"); + + Result result = GetResourceManager()->GetTouchScreen()->ProcessTouchScreenAutoTune(); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidDebugServer::ForceStopTouchScreenManagement(HLERequestContext& ctx) { + LOG_INFO(Service_HID, "called"); + + if (!firmware_settings->IsDeviceManaged()) { + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + return; + } + + Result result = ResultSuccess; + bool is_touch_active{}; + bool is_gesture_active{}; + auto touch_screen = GetResourceManager()->GetTouchScreen(); + auto gesture = GetResourceManager()->GetGesture(); + + if (firmware_settings->IsTouchI2cManaged()) { + result = touch_screen->IsActive(is_touch_active); + if (result.IsSuccess()) { + result = gesture->IsActive(is_gesture_active); + } + if (result.IsSuccess() && is_touch_active) { + result = touch_screen->Deactivate(); + } + if (result.IsSuccess() && is_gesture_active) { + result = gesture->Deactivate(); + } + } + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidDebugServer::ForceRestartTouchScreenManagement(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + struct Parameters { + u32 basic_gesture_id; + INSERT_PADDING_WORDS_NOINIT(1); + u64 applet_resource_user_id; + }; + static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw<Parameters>()}; + + LOG_INFO(Service_HID, "called, basic_gesture_id={}, applet_resource_user_id={}", + parameters.basic_gesture_id, parameters.applet_resource_user_id); + + Result result = ResultSuccess; + auto touch_screen = GetResourceManager()->GetTouchScreen(); + auto gesture = GetResourceManager()->GetGesture(); + + if (firmware_settings->IsDeviceManaged() && firmware_settings->IsTouchI2cManaged()) { + result = gesture->Activate(); + if (result.IsSuccess()) { + result = + gesture->Activate(parameters.applet_resource_user_id, parameters.basic_gesture_id); + } + if (result.IsSuccess()) { + result = touch_screen->Activate(); + } + if (result.IsSuccess()) { + result = touch_screen->Activate(parameters.applet_resource_user_id); + } + } + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidDebugServer::IsTouchScreenManaged(HLERequestContext& ctx) { + LOG_INFO(Service_HID, "called"); + + bool is_touch_active{}; + bool is_gesture_active{}; + + Result result = GetResourceManager()->GetTouchScreen()->IsActive(is_touch_active); + if (result.IsSuccess()) { + result = GetResourceManager()->GetGesture()->IsActive(is_gesture_active); + } + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(result); + rb.Push(is_touch_active | is_gesture_active); +} + +void IHidDebugServer::DeactivateGesture(HLERequestContext& ctx) { + LOG_INFO(Service_HID, "called"); + + Result result = ResultSuccess; + + if (!firmware_settings->IsDeviceManaged()) { + result = GetResourceManager()->GetGesture()->Deactivate(); + } + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} std::shared_ptr<ResourceManager> IHidDebugServer::GetResourceManager() { resource_manager->Initialize(); diff --git a/src/core/hle/service/hid/hid_debug_server.h b/src/core/hle/service/hid/hid_debug_server.h index 406db2211..7d5b082b3 100644 --- a/src/core/hle/service/hid/hid_debug_server.h +++ b/src/core/hle/service/hid/hid_debug_server.h @@ -11,16 +11,29 @@ class System; namespace Service::HID { class ResourceManager; +class HidFirmwareSettings; class IHidDebugServer final : public ServiceFramework<IHidDebugServer> { public: - explicit IHidDebugServer(Core::System& system_, std::shared_ptr<ResourceManager> resource); + explicit IHidDebugServer(Core::System& system_, std::shared_ptr<ResourceManager> resource, + std::shared_ptr<HidFirmwareSettings> settings); ~IHidDebugServer() override; private: + void DeactivateTouchScreen(HLERequestContext& ctx); + void SetTouchScreenAutoPilotState(HLERequestContext& ctx); + void UnsetTouchScreenAutoPilotState(HLERequestContext& ctx); + void GetTouchScreenConfiguration(HLERequestContext& ctx); + void ProcessTouchScreenAutoTune(HLERequestContext& ctx); + void ForceStopTouchScreenManagement(HLERequestContext& ctx); + void ForceRestartTouchScreenManagement(HLERequestContext& ctx); + void IsTouchScreenManaged(HLERequestContext& ctx); + void DeactivateGesture(HLERequestContext& ctx); + std::shared_ptr<ResourceManager> GetResourceManager(); std::shared_ptr<ResourceManager> resource_manager; + std::shared_ptr<HidFirmwareSettings> firmware_settings; }; } // namespace Service::HID diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp index 09c47b5e3..3603d8ccf 100644 --- a/src/core/hle/service/hid/hid_server.cpp +++ b/src/core/hle/service/hid/hid_server.cpp @@ -8,6 +8,7 @@ #include "core/hle/kernel/k_shared_memory.h" #include "core/hle/kernel/k_transfer_memory.h" #include "core/hle/kernel/kernel.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/hid/hid_server.h" #include "core/hle/service/ipc_helpers.h" #include "core/memory.h" @@ -153,7 +154,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> r {104, &IHidServer::DeactivateNpad, "DeactivateNpad"}, {106, &IHidServer::AcquireNpadStyleSetUpdateEventHandle, "AcquireNpadStyleSetUpdateEventHandle"}, {107, &IHidServer::DisconnectNpad, "DisconnectNpad"}, - {108, &IHidServer::GetPlayerLedPattern, "GetPlayerLedPattern"}, + {108, C<&IHidServer::GetPlayerLedPattern>, "GetPlayerLedPattern"}, {109, &IHidServer::ActivateNpadWithRevision, "ActivateNpadWithRevision"}, {120, &IHidServer::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, {121, &IHidServer::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, @@ -989,8 +990,7 @@ void IHidServer::ActivateGesture(HLERequestContext& ctx) { } if (result.IsSuccess()) { - // TODO: Use gesture id here - result = gesture->Activate(parameters.applet_resource_user_id); + result = gesture->Activate(parameters.applet_resource_user_id, parameters.basic_gesture_id); } IPC::ResponseBuilder rb{ctx, 2}; @@ -1136,19 +1136,39 @@ void IHidServer::DisconnectNpad(HLERequestContext& ctx) { rb.Push(ResultSuccess); } -void IHidServer::GetPlayerLedPattern(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()}; - - Core::HID::LedPattern pattern{0, 0, 0, 0}; - auto controller = GetResourceManager()->GetNpad(); - const auto result = controller->GetLedPattern(npad_id, pattern); - +Result IHidServer::GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern, + Core::HID::NpadIdType npad_id) { LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(result); - rb.Push(pattern.raw); + switch (npad_id) { + case Core::HID::NpadIdType::Player1: + *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player2: + *out_led_pattern = Core::HID::LedPattern{1, 1, 0, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player3: + *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player4: + *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 1}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player5: + *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 1}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player6: + *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player7: + *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 1}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player8: + *out_led_pattern = Core::HID::LedPattern{0, 1, 1, 0}; + R_SUCCEED(); + default: + *out_led_pattern = Core::HID::LedPattern{0, 0, 0, 0}; + R_SUCCEED(); + } } void IHidServer::ActivateNpadWithRevision(HLERequestContext& ctx) { @@ -2449,14 +2469,22 @@ void IHidServer::GetNpadCommunicationMode(HLERequestContext& ctx) { void IHidServer::SetTouchScreenConfiguration(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; - const auto touchscreen_mode{rp.PopRaw<Core::HID::TouchScreenConfigurationForNx>()}; + auto touchscreen_config{rp.PopRaw<Core::HID::TouchScreenConfigurationForNx>()}; const auto applet_resource_user_id{rp.Pop<u64>()}; - LOG_WARNING(Service_HID, "(STUBBED) called, touchscreen_mode={}, applet_resource_user_id={}", - touchscreen_mode.mode, applet_resource_user_id); + LOG_INFO(Service_HID, "called, touchscreen_config={}, applet_resource_user_id={}", + touchscreen_config.mode, applet_resource_user_id); + + if (touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Heat2 && + touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Finger) { + touchscreen_config.mode = Core::HID::TouchScreenModeForNx::UseSystemSetting; + } + + const Result result = GetResourceManager()->GetTouchScreen()->SetTouchScreenConfiguration( + touchscreen_config, applet_resource_user_id); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::IsFirmwareUpdateNeededForNotification(HLERequestContext& ctx) { @@ -2484,11 +2512,12 @@ void IHidServer::SetTouchScreenResolution(HLERequestContext& ctx) { const auto height{rp.Pop<u32>()}; const auto applet_resource_user_id{rp.Pop<u64>()}; - GetResourceManager()->GetTouchScreen()->SetTouchscreenDimensions(width, height); - LOG_INFO(Service_HID, "called, width={}, height={}, applet_resource_user_id={}", width, height, applet_resource_user_id); + GetResourceManager()->GetTouchScreen()->SetTouchScreenResolution(width, height, + applet_resource_user_id); + IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } diff --git a/src/core/hle/service/hid/hid_server.h b/src/core/hle/service/hid/hid_server.h index 3a2e0a230..faf775689 100644 --- a/src/core/hle/service/hid/hid_server.h +++ b/src/core/hle/service/hid/hid_server.h @@ -3,7 +3,9 @@ #pragma once +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" +#include "hid_core/hid_types.h" namespace Core { class System; @@ -66,7 +68,8 @@ private: void DeactivateNpad(HLERequestContext& ctx); void AcquireNpadStyleSetUpdateEventHandle(HLERequestContext& ctx); void DisconnectNpad(HLERequestContext& ctx); - void GetPlayerLedPattern(HLERequestContext& ctx); + Result GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern, + Core::HID::NpadIdType npad_id); void ActivateNpadWithRevision(HLERequestContext& ctx); void SetNpadJoyHoldType(HLERequestContext& ctx); void GetNpadJoyHoldType(HLERequestContext& ctx); diff --git a/src/core/hle/service/hid/hid_system_server.cpp b/src/core/hle/service/hid/hid_system_server.cpp index d1ec42edc..22471e9e2 100644 --- a/src/core/hle/service/hid/hid_system_server.cpp +++ b/src/core/hle/service/hid/hid_system_server.cpp @@ -155,9 +155,9 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour {1133, nullptr, "StartUsbFirmwareUpdate"}, {1134, nullptr, "GetUsbFirmwareUpdateState"}, {1135, &IHidSystemServer::InitializeUsbFirmwareUpdateWithoutMemory, "InitializeUsbFirmwareUpdateWithoutMemory"}, - {1150, nullptr, "SetTouchScreenMagnification"}, - {1151, nullptr, "GetTouchScreenFirmwareVersion"}, - {1152, nullptr, "SetTouchScreenDefaultConfiguration"}, + {1150, &IHidSystemServer::SetTouchScreenMagnification, "SetTouchScreenMagnification"}, + {1151, &IHidSystemServer::GetTouchScreenFirmwareVersion, "GetTouchScreenFirmwareVersion"}, + {1152, &IHidSystemServer::SetTouchScreenDefaultConfiguration, "SetTouchScreenDefaultConfiguration"}, {1153, &IHidSystemServer::GetTouchScreenDefaultConfiguration, "GetTouchScreenDefaultConfiguration"}, {1154, nullptr, "IsFirmwareAvailableForNotification"}, {1155, &IHidSystemServer::SetForceHandheldStyleVibration, "SetForceHandheldStyleVibration"}, @@ -845,12 +845,60 @@ void IHidSystemServer::InitializeUsbFirmwareUpdateWithoutMemory(HLERequestContex rb.Push(ResultSuccess); } +void IHidSystemServer::SetTouchScreenMagnification(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto point1x{rp.Pop<f32>()}; + const auto point1y{rp.Pop<f32>()}; + const auto point2x{rp.Pop<f32>()}; + const auto point2y{rp.Pop<f32>()}; + + LOG_INFO(Service_HID, "called, point1=-({},{}), point2=({},{})", point1x, point1y, point2x, + point2y); + + const Result result = GetResourceManager()->GetTouchScreen()->SetTouchScreenMagnification( + point1x, point1y, point2x, point2y); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidSystemServer::GetTouchScreenFirmwareVersion(HLERequestContext& ctx) { + LOG_INFO(Service_HID, "called"); + + Core::HID::FirmwareVersion firmware{}; + const auto result = GetResourceManager()->GetTouchScreenFirmwareVersion(firmware); + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(result); + rb.PushRaw(firmware); +} + +void IHidSystemServer::SetTouchScreenDefaultConfiguration(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + auto touchscreen_config{rp.PopRaw<Core::HID::TouchScreenConfigurationForNx>()}; + + LOG_INFO(Service_HID, "called, touchscreen_config={}", touchscreen_config.mode); + + if (touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Heat2 && + touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Finger) { + touchscreen_config.mode = Core::HID::TouchScreenModeForNx::UseSystemSetting; + } + + const Result result = + GetResourceManager()->GetTouchScreen()->SetTouchScreenDefaultConfiguration( + touchscreen_config); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + void IHidSystemServer::GetTouchScreenDefaultConfiguration(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + LOG_INFO(Service_HID, "called"); - Core::HID::TouchScreenConfigurationForNx touchscreen_config{ - .mode = Core::HID::TouchScreenModeForNx::Finger, - }; + Core::HID::TouchScreenConfigurationForNx touchscreen_config{}; + const Result result = + GetResourceManager()->GetTouchScreen()->GetTouchScreenDefaultConfiguration( + touchscreen_config); if (touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Heat2 && touchscreen_config.mode != Core::HID::TouchScreenModeForNx::Finger) { @@ -858,7 +906,7 @@ void IHidSystemServer::GetTouchScreenDefaultConfiguration(HLERequestContext& ctx } IPC::ResponseBuilder rb{ctx, 6}; - rb.Push(ResultSuccess); + rb.Push(result); rb.PushRaw(touchscreen_config); } diff --git a/src/core/hle/service/hid/hid_system_server.h b/src/core/hle/service/hid/hid_system_server.h index 4ab4d3931..738313e08 100644 --- a/src/core/hle/service/hid/hid_system_server.h +++ b/src/core/hle/service/hid/hid_system_server.h @@ -71,6 +71,9 @@ private: void FinalizeUsbFirmwareUpdate(HLERequestContext& ctx); void CheckUsbFirmwareUpdateRequired(HLERequestContext& ctx); void InitializeUsbFirmwareUpdateWithoutMemory(HLERequestContext& ctx); + void SetTouchScreenMagnification(HLERequestContext& ctx); + void GetTouchScreenFirmwareVersion(HLERequestContext& ctx); + void SetTouchScreenDefaultConfiguration(HLERequestContext& ctx); void GetTouchScreenDefaultConfiguration(HLERequestContext& ctx); void SetForceHandheldStyleVibration(HLERequestContext& ctx); void IsUsingCustomButtonConfig(HLERequestContext& ctx); diff --git a/src/core/hle/service/jit/jit.cpp b/src/core/hle/service/jit/jit.cpp index 1f2cbcb61..4941a71a0 100644 --- a/src/core/hle/service/jit/jit.cpp +++ b/src/core/hle/service/jit/jit.cpp @@ -126,7 +126,7 @@ public: R_THROW(ResultUnknown); } - Result LoadPlugin(u64 tmem_size, InCopyHandle<Kernel::KTransferMemory>& tmem, + Result LoadPlugin(u64 tmem_size, InCopyHandle<Kernel::KTransferMemory> tmem, InBuffer<BufferAttr_HipcMapAlias> nrr, InBuffer<BufferAttr_HipcMapAlias> nro) { if (!tmem) { @@ -268,9 +268,9 @@ public: private: Result CreateJitEnvironment(Out<SharedPointer<IJitEnvironment>> out_jit_environment, - u64 rx_size, u64 ro_size, InCopyHandle<Kernel::KProcess>& process, - InCopyHandle<Kernel::KCodeMemory>& rx_mem, - InCopyHandle<Kernel::KCodeMemory>& ro_mem) { + u64 rx_size, u64 ro_size, InCopyHandle<Kernel::KProcess> process, + InCopyHandle<Kernel::KCodeMemory> rx_mem, + InCopyHandle<Kernel::KCodeMemory> ro_mem) { if (!process) { LOG_ERROR(Service_JIT, "process is null"); R_THROW(ResultUnknown); diff --git a/src/core/hle/service/mii/mii.cpp b/src/core/hle/service/mii/mii.cpp index efb7f6e32..0086f82c5 100644 --- a/src/core/hle/service/mii/mii.cpp +++ b/src/core/hle/service/mii/mii.cpp @@ -189,7 +189,7 @@ private: R_RETURN(manager->Move(metadata, new_index, create_id)); } - Result AddOrReplace(StoreData& store_data) { + Result AddOrReplace(const StoreData& store_data) { LOG_INFO(Service_Mii, "called"); R_UNLESS(is_system, ResultPermissionDenied); diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index 22dc55a6d..8e3224f73 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp @@ -185,7 +185,7 @@ public: {3, &IRequest::Cancel, "Cancel"}, {4, &IRequest::Submit, "Submit"}, {5, nullptr, "SetRequirement"}, - {6, nullptr, "SetRequirementPreset"}, + {6, &IRequest::SetRequirementPreset, "SetRequirementPreset"}, {8, nullptr, "SetPriority"}, {9, nullptr, "SetNetworkProfileId"}, {10, nullptr, "SetRejectable"}, @@ -237,6 +237,16 @@ private: rb.PushEnum(state); } + void SetRequirementPreset(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto param_1 = rp.Pop<u32>(); + + LOG_WARNING(Service_NIFM, "(STUBBED) called, param_1={}", param_1); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); + } + void GetResult(HLERequestContext& ctx) { LOG_DEBUG(Service_NIFM, "(STUBBED) called"); diff --git a/src/core/hle/service/ns/ns.cpp b/src/core/hle/service/ns/ns.cpp index 2258ee609..19c3ff01b 100644 --- a/src/core/hle/service/ns/ns.cpp +++ b/src/core/hle/service/ns/ns.cpp @@ -3,6 +3,7 @@ #include "common/logging/log.h" #include "common/settings.h" +#include "core/arm/debug.h" #include "core/core.h" #include "core/file_sys/control_metadata.h" #include "core/file_sys/patch_manager.h" @@ -544,8 +545,8 @@ IDocumentInterface::IDocumentInterface(Core::System& system_) // clang-format off static const FunctionInfo functions[] = { {21, nullptr, "GetApplicationContentPath"}, - {23, nullptr, "ResolveApplicationContentPath"}, - {93, nullptr, "GetRunningApplicationProgramId"}, + {23, &IDocumentInterface::ResolveApplicationContentPath, "ResolveApplicationContentPath"}, + {92, &IDocumentInterface::GetRunningApplicationProgramId, "GetRunningApplicationProgramId"}, }; // clang-format on @@ -554,6 +555,32 @@ IDocumentInterface::IDocumentInterface(Core::System& system_) IDocumentInterface::~IDocumentInterface() = default; +void IDocumentInterface::ResolveApplicationContentPath(HLERequestContext& ctx) { + struct ContentPath { + u8 file_system_proxy_type; + u64 program_id; + }; + static_assert(sizeof(ContentPath) == 0x10, "ContentPath has wrong size"); + + IPC::RequestParser rp{ctx}; + auto content_path = rp.PopRaw<ContentPath>(); + LOG_WARNING(Service_NS, "(STUBBED) called, file_system_proxy_type={}, program_id={:016X}", + content_path.file_system_proxy_type, content_path.program_id); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + +void IDocumentInterface::GetRunningApplicationProgramId(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto caller_program_id = rp.PopRaw<u64>(); + LOG_WARNING(Service_NS, "(STUBBED) called, caller_program_id={:016X}", caller_program_id); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push<u64>(system.GetApplicationProcessProgramID()); +} + IDownloadTaskInterface::IDownloadTaskInterface(Core::System& system_) : ServiceFramework{system_, "IDownloadTaskInterface"} { // clang-format off @@ -613,6 +640,40 @@ IFactoryResetInterface::IFactoryResetInterface(Core::System& system_) IFactoryResetInterface::~IFactoryResetInterface() = default; +IReadOnlyApplicationRecordInterface::IReadOnlyApplicationRecordInterface(Core::System& system_) + : ServiceFramework{system_, "IReadOnlyApplicationRecordInterface"} { + static const FunctionInfo functions[] = { + {0, &IReadOnlyApplicationRecordInterface::HasApplicationRecord, "HasApplicationRecord"}, + {1, nullptr, "NotifyApplicationFailure"}, + {2, &IReadOnlyApplicationRecordInterface::IsDataCorruptedResult, "IsDataCorruptedResult"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IReadOnlyApplicationRecordInterface::~IReadOnlyApplicationRecordInterface() = default; + +void IReadOnlyApplicationRecordInterface::HasApplicationRecord(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const u64 program_id = rp.PopRaw<u64>(); + LOG_WARNING(Service_NS, "(STUBBED) called, program_id={:X}", program_id); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u8>(1); +} + +void IReadOnlyApplicationRecordInterface::IsDataCorruptedResult(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto result = rp.PopRaw<Result>(); + LOG_WARNING(Service_NS, "(STUBBED) called, result={:#x}", result.GetInnerValue()); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push<u8>(0); +} + IReadOnlyApplicationControlDataInterface::IReadOnlyApplicationControlDataInterface( Core::System& system_) : ServiceFramework{system_, "IReadOnlyApplicationControlDataInterface"} { @@ -663,7 +724,7 @@ NS::NS(const char* name, Core::System& system_) : ServiceFramework{system_, name static const FunctionInfo functions[] = { {7988, nullptr, "GetDynamicRightsInterface"}, {7989, &NS::PushInterface<IReadOnlyApplicationControlDataInterface>, "GetReadOnlyApplicationControlDataInterface"}, - {7991, nullptr, "GetReadOnlyApplicationRecordInterface"}, + {7991, &NS::PushInterface<IReadOnlyApplicationRecordInterface>, "GetReadOnlyApplicationRecordInterface"}, {7992, &NS::PushInterface<IECommerceInterface>, "GetECommerceInterface"}, {7993, &NS::PushInterface<IApplicationVersionInterface>, "GetApplicationVersionInterface"}, {7994, &NS::PushInterface<IFactoryResetInterface>, "GetFactoryResetInterface"}, diff --git a/src/core/hle/service/ns/ns.h b/src/core/hle/service/ns/ns.h index 34d2a45dc..9ee306ef9 100644 --- a/src/core/hle/service/ns/ns.h +++ b/src/core/hle/service/ns/ns.h @@ -58,6 +58,10 @@ class IDocumentInterface final : public ServiceFramework<IDocumentInterface> { public: explicit IDocumentInterface(Core::System& system_); ~IDocumentInterface() override; + +private: + void ResolveApplicationContentPath(HLERequestContext& ctx); + void GetRunningApplicationProgramId(HLERequestContext& ctx); }; class IDownloadTaskInterface final : public ServiceFramework<IDownloadTaskInterface> { @@ -78,6 +82,17 @@ public: ~IFactoryResetInterface() override; }; +class IReadOnlyApplicationRecordInterface final + : public ServiceFramework<IReadOnlyApplicationRecordInterface> { +public: + explicit IReadOnlyApplicationRecordInterface(Core::System& system_); + ~IReadOnlyApplicationRecordInterface() override; + +private: + void HasApplicationRecord(HLERequestContext& ctx); + void IsDataCorruptedResult(HLERequestContext& ctx); +}; + class IReadOnlyApplicationControlDataInterface final : public ServiceFramework<IReadOnlyApplicationControlDataInterface> { public: diff --git a/src/core/hle/service/nvdrv/core/container.cpp b/src/core/hle/service/nvdrv/core/container.cpp index dc1b4d5be..e89cca6f2 100644 --- a/src/core/hle/service/nvdrv/core/container.cpp +++ b/src/core/hle/service/nvdrv/core/container.cpp @@ -83,7 +83,9 @@ SessionId Container::OpenSession(Kernel::KProcess* process) { // Check if this memory block is heap. if (svc_mem_info.state == Kernel::Svc::MemoryState::Normal) { - if (svc_mem_info.size > region_size) { + if (region_start + region_size == svc_mem_info.base_address) { + region_size += svc_mem_info.size; + } else if (svc_mem_info.size > region_size) { region_size = svc_mem_info.size; region_start = svc_mem_info.base_address; } diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp index c1ebbd62d..abe95303e 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include <boost/container/small_vector.hpp> + #include "common/assert.h" #include "common/logging/log.h" #include "core/core.h" @@ -38,19 +40,30 @@ NvResult nvdisp_disp0::Ioctl3(DeviceFD fd, Ioctl command, std::span<const u8> in void nvdisp_disp0::OnOpen(NvCore::SessionId session_id, DeviceFD fd) {} void nvdisp_disp0::OnClose(DeviceFD fd) {} -void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, android::PixelFormat format, u32 width, - u32 height, u32 stride, android::BufferTransformFlags transform, - const Common::Rectangle<int>& crop_rect, - std::array<Service::Nvidia::NvFence, 4>& fences, u32 num_fences) { - const DAddr addr = nvmap.GetHandleAddress(buffer_handle); - LOG_TRACE(Service, - "Drawing from address {:X} offset {:08X} Width {} Height {} Stride {} Format {}", - addr, offset, width, height, stride, format); +void nvdisp_disp0::Composite(std::span<const Nvnflinger::HwcLayer> sorted_layers) { + std::vector<Tegra::FramebufferConfig> output_layers; + std::vector<Service::Nvidia::NvFence> output_fences; + output_layers.reserve(sorted_layers.size()); + output_fences.reserve(sorted_layers.size()); + + for (auto& layer : sorted_layers) { + output_layers.emplace_back(Tegra::FramebufferConfig{ + .address = nvmap.GetHandleAddress(layer.buffer_handle), + .offset = layer.offset, + .width = layer.width, + .height = layer.height, + .stride = layer.stride, + .pixel_format = layer.format, + .transform_flags = layer.transform, + .crop_rect = layer.crop_rect, + }); - const Tegra::FramebufferConfig framebuffer{addr, offset, width, height, - stride, format, transform, crop_rect}; + for (size_t i = 0; i < layer.acquire_fence.num_fences; i++) { + output_fences.push_back(layer.acquire_fence.fences[i]); + } + } - system.GPU().RequestSwapBuffers(&framebuffer, fences, num_fences); + system.GPU().RequestComposite(std::move(output_layers), std::move(output_fences)); system.SpeedLimiter().DoSpeedLimiting(system.CoreTiming().GetGlobalTimeUs()); system.GetPerfStats().EndSystemFrame(); system.GetPerfStats().BeginSystemFrame(); diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h index 5f13a50a2..1082b85c2 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h @@ -8,8 +8,7 @@ #include "common/common_types.h" #include "common/math_util.h" #include "core/hle/service/nvdrv/devices/nvdevice.h" -#include "core/hle/service/nvnflinger/buffer_transform_flags.h" -#include "core/hle/service/nvnflinger/pixel_format.h" +#include "core/hle/service/nvnflinger/hwc_layer.h" namespace Service::Nvidia::NvCore { class Container; @@ -35,11 +34,8 @@ public: void OnOpen(NvCore::SessionId session_id, DeviceFD fd) override; void OnClose(DeviceFD fd) override; - /// Performs a screen flip, drawing the buffer pointed to by the handle. - void flip(u32 buffer_handle, u32 offset, android::PixelFormat format, u32 width, u32 height, - u32 stride, android::BufferTransformFlags transform, - const Common::Rectangle<int>& crop_rect, - std::array<Service::Nvidia::NvFence, 4>& fences, u32 num_fences); + /// Performs a screen flip, compositing each buffer. + void Composite(std::span<const Nvnflinger::HwcLayer> sorted_layers); Kernel::KEvent* QueryEvent(u32 event_id) override; diff --git a/src/core/hle/service/nvnflinger/fb_share_buffer_manager.cpp b/src/core/hle/service/nvnflinger/fb_share_buffer_manager.cpp index 86e272b41..e71652cdf 100644 --- a/src/core/hle/service/nvnflinger/fb_share_buffer_manager.cpp +++ b/src/core/hle/service/nvnflinger/fb_share_buffer_manager.cpp @@ -128,7 +128,7 @@ Result AllocateHandleForBuffer(u32* out_handle, Nvidia::Module& nvdrv, Nvidia::D // Ensure we maintain a clean state on failure. ON_RESULT_FAILURE { - ASSERT(R_SUCCEEDED(FreeNvMapHandle(*nvmap, *out_handle, nvmap_fd))); + R_ASSERT(FreeNvMapHandle(*nvmap, *out_handle, nvmap_fd)); }; // Assign the allocated memory to the handle. diff --git a/src/core/hle/service/nvnflinger/hardware_composer.cpp b/src/core/hle/service/nvnflinger/hardware_composer.cpp new file mode 100644 index 000000000..c720dd1f8 --- /dev/null +++ b/src/core/hle/service/nvnflinger/hardware_composer.cpp @@ -0,0 +1,215 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#include <boost/container/small_vector.hpp> + +#include "common/microprofile.h" +#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" +#include "core/hle/service/nvnflinger/buffer_item.h" +#include "core/hle/service/nvnflinger/buffer_item_consumer.h" +#include "core/hle/service/nvnflinger/buffer_queue_producer.h" +#include "core/hle/service/nvnflinger/hardware_composer.h" +#include "core/hle/service/nvnflinger/hwc_layer.h" +#include "core/hle/service/nvnflinger/ui/graphic_buffer.h" +#include "core/hle/service/vi/display/vi_display.h" +#include "core/hle/service/vi/layer/vi_layer.h" + +namespace Service::Nvnflinger { + +namespace { + +s32 NormalizeSwapInterval(f32* out_speed_scale, s32 swap_interval) { + if (swap_interval <= 0) { + // As an extension, treat nonpositive swap interval as speed multiplier. + if (out_speed_scale) { + *out_speed_scale = 2.f * static_cast<f32>(1 - swap_interval); + } + + swap_interval = 1; + } + + if (swap_interval >= 5) { + // As an extension, treat high swap interval as precise speed control. + if (out_speed_scale) { + *out_speed_scale = static_cast<f32>(swap_interval) / 100.f; + } + + swap_interval = 1; + } + + return swap_interval; +} + +} // namespace + +HardwareComposer::HardwareComposer() = default; +HardwareComposer::~HardwareComposer() = default; + +u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, VI::Display& display, + Nvidia::Devices::nvdisp_disp0& nvdisp, u32 frame_advance) { + boost::container::small_vector<HwcLayer, 2> composition_stack; + + m_frame_number += frame_advance; + + // Release any necessary framebuffers. + for (auto& [layer_id, framebuffer] : m_framebuffers) { + if (framebuffer.release_frame_number > m_frame_number) { + // Not yet ready to release this framebuffer. + continue; + } + + if (!framebuffer.is_acquired) { + // Already released. + continue; + } + + if (auto* layer = display.FindLayer(layer_id); layer != nullptr) { + // TODO: support release fence + // This is needed to prevent screen tearing + layer->GetConsumer().ReleaseBuffer(framebuffer.item, android::Fence::NoFence()); + framebuffer.is_acquired = false; + } + } + + // Set default speed limit to 100%. + *out_speed_scale = 1.0f; + + // Determine the number of vsync periods to wait before composing again. + std::optional<s32> swap_interval{}; + bool has_acquired_buffer{}; + + // Acquire all necessary framebuffers. + for (size_t i = 0; i < display.GetNumLayers(); i++) { + auto& layer = display.GetLayer(i); + auto layer_id = layer.GetLayerId(); + + // Try to fetch the framebuffer (either new or stale). + const auto result = this->CacheFramebufferLocked(layer, layer_id); + + // If we failed, skip this layer. + if (result == CacheStatus::NoBufferAvailable) { + continue; + } + + // If we acquired a new buffer, we need to present. + if (result == CacheStatus::BufferAcquired) { + has_acquired_buffer = true; + } + + const auto& buffer = m_framebuffers[layer_id]; + const auto& item = buffer.item; + const auto& igbp_buffer = *item.graphic_buffer; + + // TODO: get proper Z-index from layer + composition_stack.emplace_back(HwcLayer{ + .buffer_handle = igbp_buffer.BufferId(), + .offset = igbp_buffer.Offset(), + .format = igbp_buffer.ExternalFormat(), + .width = igbp_buffer.Width(), + .height = igbp_buffer.Height(), + .stride = igbp_buffer.Stride(), + .z_index = 0, + .transform = static_cast<android::BufferTransformFlags>(item.transform), + .crop_rect = item.crop, + .acquire_fence = item.fence, + }); + + // We need to compose again either before this frame is supposed to + // be released, or exactly on the vsync period it should be released. + const s32 item_swap_interval = NormalizeSwapInterval(out_speed_scale, item.swap_interval); + + // TODO: handle cases where swap intervals are relatively prime. So far, + // only swap intervals of 0, 1 and 2 have been observed, but if 3 were + // to be introduced, this would cause an issue. + if (swap_interval) { + swap_interval = std::min(*swap_interval, item_swap_interval); + } else { + swap_interval = item_swap_interval; + } + } + + // If any new buffers were acquired, we can present. + if (has_acquired_buffer) { + // Sort by Z-index. + std::stable_sort(composition_stack.begin(), composition_stack.end(), + [&](auto& l, auto& r) { return l.z_index < r.z_index; }); + + // Composite. + nvdisp.Composite(composition_stack); + } + + // Render MicroProfile. + MicroProfileFlip(); + + // Advance by at least one frame. + return swap_interval.value_or(1); +} + +void HardwareComposer::RemoveLayerLocked(VI::Display& display, LayerId layer_id) { + // Check if we are tracking a slot with this layer_id. + const auto it = m_framebuffers.find(layer_id); + if (it == m_framebuffers.end()) { + return; + } + + // Try to release the buffer item. + auto* const layer = display.FindLayer(layer_id); + if (layer && it->second.is_acquired) { + layer->GetConsumer().ReleaseBuffer(it->second.item, android::Fence::NoFence()); + } + + // Erase the slot. + m_framebuffers.erase(it); +} + +bool HardwareComposer::TryAcquireFramebufferLocked(VI::Layer& layer, Framebuffer& framebuffer) { + // Attempt the update. + const auto status = layer.GetConsumer().AcquireBuffer(&framebuffer.item, {}, false); + if (status != android::Status::NoError) { + return false; + } + + // We succeeded, so set the new release frame info. + framebuffer.release_frame_number = + NormalizeSwapInterval(nullptr, framebuffer.item.swap_interval); + framebuffer.is_acquired = true; + + return true; +} + +HardwareComposer::CacheStatus HardwareComposer::CacheFramebufferLocked(VI::Layer& layer, + LayerId layer_id) { + // Check if this framebuffer is already present. + const auto it = m_framebuffers.find(layer_id); + if (it != m_framebuffers.end()) { + // If it's currently still acquired, we are done. + if (it->second.is_acquired) { + return CacheStatus::CachedBufferReused; + } + + // Try to acquire a new item. + if (this->TryAcquireFramebufferLocked(layer, it->second)) { + // We got a new item. + return CacheStatus::BufferAcquired; + } else { + // We didn't acquire a new item, but we can reuse the slot. + return CacheStatus::CachedBufferReused; + } + } + + // Framebuffer is not present, so try to create it. + Framebuffer framebuffer{}; + + if (this->TryAcquireFramebufferLocked(layer, framebuffer)) { + // Move the buffer item into a new slot. + m_framebuffers.emplace(layer_id, std::move(framebuffer)); + + // We succeeded. + return CacheStatus::BufferAcquired; + } + + // We couldn't acquire the buffer item, so don't create a slot. + return CacheStatus::NoBufferAvailable; +} + +} // namespace Service::Nvnflinger diff --git a/src/core/hle/service/nvnflinger/hardware_composer.h b/src/core/hle/service/nvnflinger/hardware_composer.h new file mode 100644 index 000000000..ddab94ac9 --- /dev/null +++ b/src/core/hle/service/nvnflinger/hardware_composer.h @@ -0,0 +1,59 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include <memory> +#include <boost/container/flat_map.hpp> + +#include "core/hle/service/nvnflinger/buffer_item.h" + +namespace Service::Nvidia::Devices { +class nvdisp_disp0; +} + +namespace Service::VI { +class Display; +class Layer; +} // namespace Service::VI + +namespace Service::Nvnflinger { + +using LayerId = u64; + +class HardwareComposer { +public: + explicit HardwareComposer(); + ~HardwareComposer(); + + u32 ComposeLocked(f32* out_speed_scale, VI::Display& display, + Nvidia::Devices::nvdisp_disp0& nvdisp, u32 frame_advance); + void RemoveLayerLocked(VI::Display& display, LayerId layer_id); + +private: + // TODO: do we want to track frame number in vi instead? + u64 m_frame_number{0}; + +private: + using ReleaseFrameNumber = u64; + + struct Framebuffer { + android::BufferItem item{}; + ReleaseFrameNumber release_frame_number{}; + bool is_acquired{false}; + }; + + enum class CacheStatus : u32 { + NoBufferAvailable, + BufferAcquired, + CachedBufferReused, + }; + + boost::container::flat_map<LayerId, Framebuffer> m_framebuffers{}; + +private: + bool TryAcquireFramebufferLocked(VI::Layer& layer, Framebuffer& framebuffer); + CacheStatus CacheFramebufferLocked(VI::Layer& layer, LayerId layer_id); +}; + +} // namespace Service::Nvnflinger diff --git a/src/core/hle/service/nvnflinger/hwc_layer.h b/src/core/hle/service/nvnflinger/hwc_layer.h new file mode 100644 index 000000000..3af668a25 --- /dev/null +++ b/src/core/hle/service/nvnflinger/hwc_layer.h @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include "common/math_util.h" +#include "core/hle/service/nvdrv/nvdata.h" +#include "core/hle/service/nvnflinger/buffer_transform_flags.h" +#include "core/hle/service/nvnflinger/pixel_format.h" +#include "core/hle/service/nvnflinger/ui/fence.h" + +namespace Service::Nvnflinger { + +struct HwcLayer { + u32 buffer_handle; + u32 offset; + android::PixelFormat format; + u32 width; + u32 height; + u32 stride; + s32 z_index; + android::BufferTransformFlags transform; + Common::Rectangle<int> crop_rect; + android::Fence acquire_fence; +}; + +} // namespace Service::Nvnflinger diff --git a/src/core/hle/service/nvnflinger/nvnflinger.cpp b/src/core/hle/service/nvnflinger/nvnflinger.cpp index 71d6fdb0c..a4e848882 100644 --- a/src/core/hle/service/nvnflinger/nvnflinger.cpp +++ b/src/core/hle/service/nvnflinger/nvnflinger.cpp @@ -18,6 +18,7 @@ #include "core/hle/service/nvnflinger/buffer_item_consumer.h" #include "core/hle/service/nvnflinger/buffer_queue_core.h" #include "core/hle/service/nvnflinger/fb_share_buffer_manager.h" +#include "core/hle/service/nvnflinger/hardware_composer.h" #include "core/hle/service/nvnflinger/hos_binder_driver_server.h" #include "core/hle/service/nvnflinger/nvnflinger.h" #include "core/hle/service/nvnflinger/ui/graphic_buffer.h" @@ -198,6 +199,16 @@ bool Nvnflinger::CloseLayer(u64 layer_id) { return false; } +void Nvnflinger::SetLayerVisibility(u64 layer_id, bool visible) { + const auto lock_guard = Lock(); + + for (auto& display : displays) { + if (auto* layer = display.FindLayer(layer_id); layer) { + layer->SetVisibility(visible); + } + } +} + void Nvnflinger::DestroyLayer(u64 layer_id) { const auto lock_guard = Lock(); @@ -269,45 +280,19 @@ void Nvnflinger::Compose() { SCOPE_EXIT({ display.SignalVSyncEvent(); }); // Don't do anything for displays without layers. - if (!display.HasLayers()) - continue; - - // TODO(Subv): Support more than 1 layer. - VI::Layer& layer = display.GetLayer(0); - - android::BufferItem buffer{}; - const auto status = layer.GetConsumer().AcquireBuffer(&buffer, {}, false); - - if (status != android::Status::NoError) { + if (!display.HasLayers()) { continue; } - const auto& igbp_buffer = *buffer.graphic_buffer; - if (!system.IsPoweredOn()) { return; // We are likely shutting down } - // Now send the buffer to the GPU for drawing. - // TODO(Subv): Support more than just disp0. The display device selection is probably based - // on which display we're drawing (Default, Internal, External, etc) auto nvdisp = nvdrv->GetDevice<Nvidia::Devices::nvdisp_disp0>(disp_fd); ASSERT(nvdisp); - Common::Rectangle<int> crop_rect{ - static_cast<int>(buffer.crop.Left()), static_cast<int>(buffer.crop.Top()), - static_cast<int>(buffer.crop.Right()), static_cast<int>(buffer.crop.Bottom())}; - - nvdisp->flip(igbp_buffer.BufferId(), igbp_buffer.Offset(), igbp_buffer.ExternalFormat(), - igbp_buffer.Width(), igbp_buffer.Height(), igbp_buffer.Stride(), - static_cast<android::BufferTransformFlags>(buffer.transform), crop_rect, - buffer.fence.fences, buffer.fence.num_fences); - - MicroProfileFlip(); - - swap_interval = buffer.swap_interval; - - layer.GetConsumer().ReleaseBuffer(buffer, android::Fence::NoFence()); + swap_interval = display.GetComposer().ComposeLocked(&compose_speed_scale, display, *nvdisp, + swap_interval); } } @@ -324,15 +309,16 @@ s64 Nvnflinger::GetNextTicks() const { speed_scale = 0.01f; } } + + // Adjust by speed limit determined during composition. + speed_scale /= compose_speed_scale; + if (system.GetNVDECActive() && settings.use_video_framerate.GetValue()) { // Run at intended presentation rate during video playback. speed_scale = 1.f; } - // As an extension, treat nonpositive swap interval as framerate multiplier. - const f32 effective_fps = swap_interval <= 0 ? 120.f * static_cast<f32>(1 - swap_interval) - : 60.f / static_cast<f32>(swap_interval); - + const f32 effective_fps = 60.f / static_cast<f32>(swap_interval); return static_cast<s64>(speed_scale * (1000000000.f / effective_fps)); } diff --git a/src/core/hle/service/nvnflinger/nvnflinger.h b/src/core/hle/service/nvnflinger/nvnflinger.h index a60e0ae6b..c984d55a0 100644 --- a/src/core/hle/service/nvnflinger/nvnflinger.h +++ b/src/core/hle/service/nvnflinger/nvnflinger.h @@ -46,6 +46,7 @@ class BufferQueueProducer; namespace Service::Nvnflinger { class FbShareBufferManager; +class HardwareComposer; class HosBinderDriverServer; class Nvnflinger final { @@ -79,6 +80,9 @@ public: /// Closes a layer on all displays for the given layer ID. bool CloseLayer(u64 layer_id); + /// Makes a layer visible on all displays for the given layer ID. + void SetLayerVisibility(u64 layer_id, bool visible); + /// Destroys the given layer ID. void DestroyLayer(u64 layer_id); @@ -140,6 +144,7 @@ private: u32 next_buffer_queue_id = 1; s32 swap_interval = 1; + f32 compose_speed_scale = 1.0f; bool is_abandoned = false; diff --git a/src/core/hle/service/psc/time/clocks/context_writers.cpp b/src/core/hle/service/psc/time/clocks/context_writers.cpp index ac8700f76..a44486b43 100644 --- a/src/core/hle/service/psc/time/clocks/context_writers.cpp +++ b/src/core/hle/service/psc/time/clocks/context_writers.cpp @@ -22,7 +22,7 @@ LocalSystemClockContextWriter::LocalSystemClockContextWriter(Core::System& syste SharedMemory& shared_memory) : m_system{system}, m_shared_memory{shared_memory} {} -Result LocalSystemClockContextWriter::Write(SystemClockContext& context) { +Result LocalSystemClockContextWriter::Write(const SystemClockContext& context) { if (m_in_use) { R_SUCCEED_IF(context == m_context); m_context = context; @@ -43,7 +43,7 @@ NetworkSystemClockContextWriter::NetworkSystemClockContextWriter(Core::System& s SystemClockCore& system_clock) : m_system{system}, m_shared_memory{shared_memory}, m_system_clock{system_clock} {} -Result NetworkSystemClockContextWriter::Write(SystemClockContext& context) { +Result NetworkSystemClockContextWriter::Write(const SystemClockContext& context) { s64 time{}; [[maybe_unused]] auto res = m_system_clock.GetCurrentTime(&time); @@ -66,7 +66,7 @@ EphemeralNetworkSystemClockContextWriter::EphemeralNetworkSystemClockContextWrit Core::System& system) : m_system{system} {} -Result EphemeralNetworkSystemClockContextWriter::Write(SystemClockContext& context) { +Result EphemeralNetworkSystemClockContextWriter::Write(const SystemClockContext& context) { if (m_in_use) { R_SUCCEED_IF(context == m_context); m_context = context; diff --git a/src/core/hle/service/psc/time/clocks/context_writers.h b/src/core/hle/service/psc/time/clocks/context_writers.h index afd3725d4..6643fc9f2 100644 --- a/src/core/hle/service/psc/time/clocks/context_writers.h +++ b/src/core/hle/service/psc/time/clocks/context_writers.h @@ -24,7 +24,7 @@ private: public: virtual ~ContextWriter() = default; - virtual Result Write(SystemClockContext& context) = 0; + virtual Result Write(const SystemClockContext& context) = 0; void SignalAllNodes(); void Link(OperationEvent& operation_event); @@ -37,7 +37,7 @@ class LocalSystemClockContextWriter : public ContextWriter { public: explicit LocalSystemClockContextWriter(Core::System& system, SharedMemory& shared_memory); - Result Write(SystemClockContext& context) override; + Result Write(const SystemClockContext& context) override; private: Core::System& m_system; @@ -52,7 +52,7 @@ public: explicit NetworkSystemClockContextWriter(Core::System& system, SharedMemory& shared_memory, SystemClockCore& system_clock); - Result Write(SystemClockContext& context) override; + Result Write(const SystemClockContext& context) override; private: Core::System& m_system; @@ -67,7 +67,7 @@ class EphemeralNetworkSystemClockContextWriter : public ContextWriter { public: EphemeralNetworkSystemClockContextWriter(Core::System& system); - Result Write(SystemClockContext& context) override; + Result Write(const SystemClockContext& context) override; private: Core::System& m_system; diff --git a/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.cpp b/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.cpp index 36dca6689..6a74d4594 100644 --- a/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.cpp +++ b/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.cpp @@ -5,7 +5,7 @@ namespace Service::PSC::Time { -void StandardLocalSystemClockCore::Initialize(SystemClockContext& context, s64 time) { +void StandardLocalSystemClockCore::Initialize(const SystemClockContext& context, s64 time) { SteadyClockTimePoint time_point{}; if (GetCurrentTimePoint(time_point) == ResultSuccess && context.steady_time_point.IdMatches(time_point)) { diff --git a/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.h b/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.h index 176ba3e94..5722d8e96 100644 --- a/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.h +++ b/src/core/hle/service/psc/time/clocks/standard_local_system_clock_core.h @@ -17,7 +17,7 @@ public: : SystemClockCore{steady_clock} {} ~StandardLocalSystemClockCore() override = default; - void Initialize(SystemClockContext& context, s64 time); + void Initialize(const SystemClockContext& context, s64 time); }; } // namespace Service::PSC::Time diff --git a/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.cpp b/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.cpp index 8d6cb7db1..6938d369f 100644 --- a/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.cpp +++ b/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.cpp @@ -5,7 +5,7 @@ namespace Service::PSC::Time { -void StandardNetworkSystemClockCore::Initialize(SystemClockContext& context, s64 accuracy) { +void StandardNetworkSystemClockCore::Initialize(const SystemClockContext& context, s64 accuracy) { if (SetContextAndWrite(context) != ResultSuccess) { LOG_ERROR(Service_Time, "Failed to SetContext"); } diff --git a/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.h b/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.h index 933d2c8e3..bfafc7d71 100644 --- a/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.h +++ b/src/core/hle/service/psc/time/clocks/standard_network_system_clock_core.h @@ -19,7 +19,7 @@ public: : SystemClockCore{steady_clock} {} ~StandardNetworkSystemClockCore() override = default; - void Initialize(SystemClockContext& context, s64 accuracy); + void Initialize(const SystemClockContext& context, s64 accuracy); bool IsAccuracySufficient(); private: diff --git a/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.cpp b/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.cpp index 9e9be05d6..31ed27396 100644 --- a/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.cpp +++ b/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.cpp @@ -46,7 +46,7 @@ Result StandardUserSystemClockCore::GetContext(SystemClockContext& out_context) R_RETURN(m_local_system_clock.GetContext(out_context)); } -Result StandardUserSystemClockCore::SetContext(SystemClockContext& context) { +Result StandardUserSystemClockCore::SetContext(const SystemClockContext& context) { R_RETURN(ResultNotImplemented); } diff --git a/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.h b/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.h index a7fe7648d..32b8bc3bc 100644 --- a/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.h +++ b/src/core/hle/service/psc/time/clocks/standard_user_system_clock_core.h @@ -36,7 +36,7 @@ public: Result SetAutomaticCorrection(bool automatic_correction); Result GetContext(SystemClockContext& out_context) const override; - Result SetContext(SystemClockContext& context) override; + Result SetContext(const SystemClockContext& context) override; Result GetTimePoint(SteadyClockTimePoint& out_time_point); void SetTimePointAndSignal(SteadyClockTimePoint& time_point); diff --git a/src/core/hle/service/psc/time/clocks/system_clock_core.cpp b/src/core/hle/service/psc/time/clocks/system_clock_core.cpp index c507ef517..2b7466831 100644 --- a/src/core/hle/service/psc/time/clocks/system_clock_core.cpp +++ b/src/core/hle/service/psc/time/clocks/system_clock_core.cpp @@ -51,12 +51,12 @@ Result SystemClockCore::GetContext(SystemClockContext& out_context) const { R_SUCCEED(); } -Result SystemClockCore::SetContext(SystemClockContext& context) { +Result SystemClockCore::SetContext(const SystemClockContext& context) { m_context = context; R_SUCCEED(); } -Result SystemClockCore::SetContextAndWrite(SystemClockContext& context) { +Result SystemClockCore::SetContextAndWrite(const SystemClockContext& context) { R_TRY(SetContext(context)); if (m_context_writer) { diff --git a/src/core/hle/service/psc/time/clocks/system_clock_core.h b/src/core/hle/service/psc/time/clocks/system_clock_core.h index 73811712e..0b928432f 100644 --- a/src/core/hle/service/psc/time/clocks/system_clock_core.h +++ b/src/core/hle/service/psc/time/clocks/system_clock_core.h @@ -41,8 +41,8 @@ public: } virtual Result GetContext(SystemClockContext& out_context) const; - virtual Result SetContext(SystemClockContext& context); - Result SetContextAndWrite(SystemClockContext& context); + virtual Result SetContext(const SystemClockContext& context); + Result SetContextAndWrite(const SystemClockContext& context); void LinkOperationEvent(OperationEvent& operation_event); diff --git a/src/core/hle/service/psc/time/common.h b/src/core/hle/service/psc/time/common.h index 596828b8b..3e13144a0 100644 --- a/src/core/hle/service/psc/time/common.h +++ b/src/core/hle/service/psc/time/common.h @@ -189,7 +189,7 @@ struct fmt::formatter<Service::PSC::Time::SteadyClockTimePoint> : fmt::formatter template <typename FormatContext> auto format(const Service::PSC::Time::SteadyClockTimePoint& time_point, FormatContext& ctx) const { - return fmt::format_to(ctx.out(), "time_point={}", time_point.time_point); + return fmt::format_to(ctx.out(), "[time_point={}]", time_point.time_point); } }; @@ -197,7 +197,7 @@ template <> struct fmt::formatter<Service::PSC::Time::SystemClockContext> : fmt::formatter<fmt::string_view> { template <typename FormatContext> auto format(const Service::PSC::Time::SystemClockContext& context, FormatContext& ctx) const { - return fmt::format_to(ctx.out(), "offset={} steady_time_point={}", context.offset, + return fmt::format_to(ctx.out(), "[offset={} steady_time_point={}]", context.offset, context.steady_time_point.time_point); } }; @@ -206,8 +206,9 @@ template <> struct fmt::formatter<Service::PSC::Time::CalendarTime> : fmt::formatter<fmt::string_view> { template <typename FormatContext> auto format(const Service::PSC::Time::CalendarTime& calendar, FormatContext& ctx) const { - return fmt::format_to(ctx.out(), "{}/{}/{} {}:{}:{}", calendar.day, calendar.month, - calendar.year, calendar.hour, calendar.minute, calendar.second); + return fmt::format_to(ctx.out(), "[{:02}/{:02}/{:04} {:02}:{:02}:{:02}]", calendar.day, + calendar.month, calendar.year, calendar.hour, calendar.minute, + calendar.second); } }; @@ -217,7 +218,7 @@ struct fmt::formatter<Service::PSC::Time::CalendarAdditionalInfo> template <typename FormatContext> auto format(const Service::PSC::Time::CalendarAdditionalInfo& additional, FormatContext& ctx) const { - return fmt::format_to(ctx.out(), "weekday={} yearday={} name={} is_dst={} ut_offset={}", + return fmt::format_to(ctx.out(), "[weekday={} yearday={} name={} is_dst={} ut_offset={}]", additional.day_of_week, additional.day_of_year, additional.name.data(), additional.is_dst, additional.ut_offset); } @@ -227,8 +228,7 @@ template <> struct fmt::formatter<Service::PSC::Time::LocationName> : fmt::formatter<fmt::string_view> { template <typename FormatContext> auto format(const Service::PSC::Time::LocationName& name, FormatContext& ctx) const { - std::string_view n{name.data(), name.size()}; - return formatter<string_view>::format(n, ctx); + return formatter<string_view>::format(name.data(), ctx); } }; @@ -236,8 +236,7 @@ template <> struct fmt::formatter<Service::PSC::Time::RuleVersion> : fmt::formatter<fmt::string_view> { template <typename FormatContext> auto format(const Service::PSC::Time::RuleVersion& version, FormatContext& ctx) const { - std::string_view v{version.data(), version.size()}; - return formatter<string_view>::format(v, ctx); + return formatter<string_view>::format(version.data(), ctx); } }; @@ -247,10 +246,11 @@ struct fmt::formatter<Service::PSC::Time::ClockSnapshot> : fmt::formatter<fmt::s auto format(const Service::PSC::Time::ClockSnapshot& snapshot, FormatContext& ctx) const { return fmt::format_to( ctx.out(), - "user_context={} network_context={} user_time={} network_time={} user_calendar_time={} " + "[user_context={} network_context={} user_time={} network_time={} " + "user_calendar_time={} " "network_calendar_time={} user_calendar_additional_time={} " "network_calendar_additional_time={} steady_clock_time_point={} location={} " - "is_automatic_correction_enabled={} type={}", + "is_automatic_correction_enabled={} type={}]", snapshot.user_context, snapshot.network_context, snapshot.user_time, snapshot.network_time, snapshot.user_calendar_time, snapshot.network_calendar_time, snapshot.user_calendar_additional_time, snapshot.network_calendar_additional_time, @@ -266,7 +266,7 @@ struct fmt::formatter<Service::PSC::Time::ContinuousAdjustmentTimePoint> auto format(const Service::PSC::Time::ContinuousAdjustmentTimePoint& time_point, FormatContext& ctx) const { return fmt::format_to(ctx.out(), - "rtc_offset={} diff_scale={} shift_amount={} lower={} upper={}", + "[rtc_offset={} diff_scale={} shift_amount={} lower={} upper={}]", time_point.rtc_offset, time_point.diff_scale, time_point.shift_amount, time_point.lower, time_point.upper); } diff --git a/src/core/hle/service/psc/time/service_manager.cpp b/src/core/hle/service/psc/time/service_manager.cpp index ec906b723..ed9fb32cd 100644 --- a/src/core/hle/service/psc/time/service_manager.cpp +++ b/src/core/hle/service/psc/time/service_manager.cpp @@ -78,8 +78,9 @@ Result ServiceManager::GetStaticServiceAsServiceManager(OutInterface<StaticServi } Result ServiceManager::SetupStandardSteadyClockCore(bool is_rtc_reset_detected, - Common::UUID& clock_source_id, s64 rtc_offset, - s64 internal_offset, s64 test_offset) { + const Common::UUID& clock_source_id, + s64 rtc_offset, s64 internal_offset, + s64 test_offset) { LOG_DEBUG(Service_Time, "called. is_rtc_reset_detected={} clock_source_id={} rtc_offset={} " "internal_offset={} test_offset={}", @@ -102,7 +103,8 @@ Result ServiceManager::SetupStandardSteadyClockCore(bool is_rtc_reset_detected, R_SUCCEED(); } -Result ServiceManager::SetupStandardLocalSystemClockCore(SystemClockContext& context, s64 time) { +Result ServiceManager::SetupStandardLocalSystemClockCore(const SystemClockContext& context, + s64 time) { LOG_DEBUG(Service_Time, "called. context={} context.steady_time_point.clock_source_id={} time={}", context, context.steady_time_point.clock_source_id.RawString(), time); @@ -114,17 +116,14 @@ Result ServiceManager::SetupStandardLocalSystemClockCore(SystemClockContext& con R_SUCCEED(); } -Result ServiceManager::SetupStandardNetworkSystemClockCore(SystemClockContext& context, +Result ServiceManager::SetupStandardNetworkSystemClockCore(SystemClockContext context, s64 accuracy) { LOG_DEBUG(Service_Time, "called. context={} steady_time_point.clock_source_id={} accuracy={}", context, context.steady_time_point.clock_source_id.RawString(), accuracy); // TODO this is a hack! The network clock should be updated independently, from the ntc service - // and maybe elsewhere. We do not do that, so fix the clock to the local clock on first boot - // to avoid it being stuck at 0. - if (context == Service::PSC::Time::SystemClockContext{}) { - m_local_system_clock.GetContext(context); - } + // and maybe elsewhere. We do not do that, so fix the clock to the local clock. + m_local_system_clock.GetContext(context); m_network_system_clock.SetContextWriter(m_network_system_context_writer); m_network_system_clock.Initialize(context, accuracy); @@ -134,17 +133,10 @@ Result ServiceManager::SetupStandardNetworkSystemClockCore(SystemClockContext& c } Result ServiceManager::SetupStandardUserSystemClockCore(bool automatic_correction, - SteadyClockTimePoint& time_point) { + SteadyClockTimePoint time_point) { LOG_DEBUG(Service_Time, "called. automatic_correction={} time_point={} clock_source_id={}", automatic_correction, time_point, time_point.clock_source_id.RawString()); - // TODO this is a hack! The user clock should be updated independently, from the ntc service - // and maybe elsewhere. We do not do that, so fix the clock to the local clock on first boot - // to avoid it being stuck at 0. - if (time_point == Service::PSC::Time::SteadyClockTimePoint{}) { - m_local_system_clock.GetCurrentTimePoint(time_point); - } - m_user_system_clock.SetAutomaticCorrection(automatic_correction); m_user_system_clock.SetTimePointAndSignal(time_point); m_user_system_clock.SetInitialized(); @@ -154,9 +146,9 @@ Result ServiceManager::SetupStandardUserSystemClockCore(bool automatic_correctio R_SUCCEED(); } -Result ServiceManager::SetupTimeZoneServiceCore(LocationName& name, RuleVersion& rule_version, - u32 location_count, - SteadyClockTimePoint& time_point, +Result ServiceManager::SetupTimeZoneServiceCore(const LocationName& name, + const RuleVersion& rule_version, u32 location_count, + const SteadyClockTimePoint& time_point, InBuffer<BufferAttr_HipcAutoSelect> rule_buffer) { LOG_DEBUG(Service_Time, "called. name={} rule_version={} location_count={} time_point={} " diff --git a/src/core/hle/service/psc/time/service_manager.h b/src/core/hle/service/psc/time/service_manager.h index 25d361d4f..22720e161 100644 --- a/src/core/hle/service/psc/time/service_manager.h +++ b/src/core/hle/service/psc/time/service_manager.h @@ -34,14 +34,15 @@ public: Result GetStaticServiceAsAdmin(OutInterface<StaticService> out_service); Result GetStaticServiceAsRepair(OutInterface<StaticService> out_service); Result GetStaticServiceAsServiceManager(OutInterface<StaticService> out_service); - Result SetupStandardSteadyClockCore(bool is_rtc_reset_detected, Common::UUID& clock_source_id, - s64 rtc_offset, s64 internal_offset, s64 test_offset); - Result SetupStandardLocalSystemClockCore(SystemClockContext& context, s64 time); - Result SetupStandardNetworkSystemClockCore(SystemClockContext& context, s64 accuracy); + Result SetupStandardSteadyClockCore(bool is_rtc_reset_detected, + const Common::UUID& clock_source_id, s64 rtc_offset, + s64 internal_offset, s64 test_offset); + Result SetupStandardLocalSystemClockCore(const SystemClockContext& context, s64 time); + Result SetupStandardNetworkSystemClockCore(SystemClockContext context, s64 accuracy); Result SetupStandardUserSystemClockCore(bool automatic_correction, - SteadyClockTimePoint& time_point); - Result SetupTimeZoneServiceCore(LocationName& name, RuleVersion& rule_version, - u32 location_count, SteadyClockTimePoint& time_point, + SteadyClockTimePoint time_point); + Result SetupTimeZoneServiceCore(const LocationName& name, const RuleVersion& rule_version, + u32 location_count, const SteadyClockTimePoint& time_point, InBuffer<BufferAttr_HipcAutoSelect> rule_buffer); Result SetupEphemeralNetworkSystemClockCore(); Result GetStandardLocalClockOperationEvent(OutCopyHandle<Kernel::KReadableEvent> out_event); diff --git a/src/core/hle/service/psc/time/shared_memory.cpp b/src/core/hle/service/psc/time/shared_memory.cpp index defaceebe..adef6bcd8 100644 --- a/src/core/hle/service/psc/time/shared_memory.cpp +++ b/src/core/hle/service/psc/time/shared_memory.cpp @@ -51,11 +51,11 @@ SharedMemory::SharedMemory(Core::System& system) std::memset(m_shared_memory_ptr, 0, sizeof(*m_shared_memory_ptr)); } -void SharedMemory::SetLocalSystemContext(SystemClockContext& context) { +void SharedMemory::SetLocalSystemContext(const SystemClockContext& context) { WriteToLockFreeAtomicType(&m_shared_memory_ptr->local_system_clock_contexts, context); } -void SharedMemory::SetNetworkSystemContext(SystemClockContext& context) { +void SharedMemory::SetNetworkSystemContext(const SystemClockContext& context) { WriteToLockFreeAtomicType(&m_shared_memory_ptr->network_system_clock_contexts, context); } @@ -64,7 +64,7 @@ void SharedMemory::SetSteadyClockTimePoint(ClockSourceId clock_source_id, s64 ti {time_point, clock_source_id}); } -void SharedMemory::SetContinuousAdjustment(ContinuousAdjustmentTimePoint& time_point) { +void SharedMemory::SetContinuousAdjustment(const ContinuousAdjustmentTimePoint& time_point) { WriteToLockFreeAtomicType(&m_shared_memory_ptr->continuous_adjustment_time_points, time_point); } diff --git a/src/core/hle/service/psc/time/shared_memory.h b/src/core/hle/service/psc/time/shared_memory.h index f9bf97d5c..b7bd00fc1 100644 --- a/src/core/hle/service/psc/time/shared_memory.h +++ b/src/core/hle/service/psc/time/shared_memory.h @@ -54,10 +54,10 @@ public: return m_k_shared_memory; } - void SetLocalSystemContext(SystemClockContext& context); - void SetNetworkSystemContext(SystemClockContext& context); + void SetLocalSystemContext(const SystemClockContext& context); + void SetNetworkSystemContext(const SystemClockContext& context); void SetSteadyClockTimePoint(ClockSourceId clock_source_id, s64 time_diff); - void SetContinuousAdjustment(ContinuousAdjustmentTimePoint& time_point); + void SetContinuousAdjustment(const ContinuousAdjustmentTimePoint& time_point); void SetAutomaticCorrection(bool automatic_correction); void UpdateBaseTime(s64 time); diff --git a/src/core/hle/service/psc/time/static.cpp b/src/core/hle/service/psc/time/static.cpp index 3ca3311af..24b85cc61 100644 --- a/src/core/hle/service/psc/time/static.cpp +++ b/src/core/hle/service/psc/time/static.cpp @@ -198,8 +198,8 @@ Result StaticService::GetStandardUserSystemClockAutomaticCorrectionUpdatedTime( R_SUCCEED(); } -Result StaticService::CalculateMonotonicSystemClockBaseTimePoint(Out<s64> out_time, - SystemClockContext& context) { +Result StaticService::CalculateMonotonicSystemClockBaseTimePoint( + Out<s64> out_time, const SystemClockContext& context) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, "called. context={} out_time={}", context, *out_time); }); R_UNLESS(m_time->m_standard_steady_clock.IsInitialized(), ResultClockUninitialized); @@ -231,10 +231,9 @@ Result StaticService::GetClockSnapshot(OutClockSnapshot out_snapshot, TimeType t R_RETURN(GetClockSnapshotImpl(out_snapshot, user_context, network_context, type)); } -Result StaticService::GetClockSnapshotFromSystemClockContext(TimeType type, - OutClockSnapshot out_snapshot, - SystemClockContext& user_context, - SystemClockContext& network_context) { +Result StaticService::GetClockSnapshotFromSystemClockContext( + TimeType type, OutClockSnapshot out_snapshot, const SystemClockContext& user_context, + const SystemClockContext& network_context) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, "called. type={} user_context={} network_context={} out_snapshot={}", type, @@ -294,8 +293,9 @@ Result StaticService::CalculateSpanBetween(Out<s64> out_time, InClockSnapshot a, } Result StaticService::GetClockSnapshotImpl(OutClockSnapshot out_snapshot, - SystemClockContext& user_context, - SystemClockContext& network_context, TimeType type) { + const SystemClockContext& user_context, + const SystemClockContext& network_context, + TimeType type) { out_snapshot->user_context = user_context; out_snapshot->network_context = network_context; diff --git a/src/core/hle/service/psc/time/static.h b/src/core/hle/service/psc/time/static.h index 120bab259..e11db8093 100644 --- a/src/core/hle/service/psc/time/static.h +++ b/src/core/hle/service/psc/time/static.h @@ -55,18 +55,19 @@ public: Result GetStandardUserSystemClockAutomaticCorrectionUpdatedTime( Out<SteadyClockTimePoint> out_time_point); Result CalculateMonotonicSystemClockBaseTimePoint(Out<s64> out_time, - SystemClockContext& context); + const SystemClockContext& context); Result GetClockSnapshot(OutClockSnapshot out_snapshot, TimeType type); Result GetClockSnapshotFromSystemClockContext(TimeType type, OutClockSnapshot out_snapshot, - SystemClockContext& user_context, - SystemClockContext& network_context); + const SystemClockContext& user_context, + const SystemClockContext& network_context); Result CalculateStandardUserSystemClockDifferenceByUser(Out<s64> out_difference, InClockSnapshot a, InClockSnapshot b); Result CalculateSpanBetween(Out<s64> out_time, InClockSnapshot a, InClockSnapshot b); private: - Result GetClockSnapshotImpl(OutClockSnapshot out_snapshot, SystemClockContext& user_context, - SystemClockContext& network_context, TimeType type); + Result GetClockSnapshotImpl(OutClockSnapshot out_snapshot, + const SystemClockContext& user_context, + const SystemClockContext& network_context, TimeType type); Core::System& m_system; StaticServiceSetupInfo m_setup_info; diff --git a/src/core/hle/service/psc/time/system_clock.cpp b/src/core/hle/service/psc/time/system_clock.cpp index 0695502d5..b4e9264d8 100644 --- a/src/core/hle/service/psc/time/system_clock.cpp +++ b/src/core/hle/service/psc/time/system_clock.cpp @@ -53,7 +53,7 @@ Result SystemClock::GetSystemClockContext(Out<SystemClockContext> out_context) { R_RETURN(m_clock_core.GetContext(*out_context)); } -Result SystemClock::SetSystemClockContext(SystemClockContext& context) { +Result SystemClock::SetSystemClockContext(const SystemClockContext& context) { LOG_DEBUG(Service_Time, "called. context={}", context); R_UNLESS(m_can_write_clock, ResultPermissionDenied); diff --git a/src/core/hle/service/psc/time/system_clock.h b/src/core/hle/service/psc/time/system_clock.h index b40d73595..3c11fb2f8 100644 --- a/src/core/hle/service/psc/time/system_clock.h +++ b/src/core/hle/service/psc/time/system_clock.h @@ -26,7 +26,7 @@ public: Result GetCurrentTime(Out<s64> out_time); Result SetCurrentTime(s64 time); Result GetSystemClockContext(Out<SystemClockContext> out_context); - Result SetSystemClockContext(SystemClockContext& context); + Result SetSystemClockContext(const SystemClockContext& context); Result GetOperationEventReadableHandle(OutCopyHandle<Kernel::KReadableEvent> out_event); private: diff --git a/src/core/hle/service/psc/time/time_zone.cpp b/src/core/hle/service/psc/time/time_zone.cpp index 82ddba42f..81bfb9092 100644 --- a/src/core/hle/service/psc/time/time_zone.cpp +++ b/src/core/hle/service/psc/time/time_zone.cpp @@ -55,7 +55,7 @@ constexpr bool GetTimeZoneTime(s64& out_time, const Tz::Rule& rule, s64 time, s3 } } // namespace -void TimeZone::SetTimePoint(SteadyClockTimePoint& time_point) { +void TimeZone::SetTimePoint(const SteadyClockTimePoint& time_point) { std::scoped_lock l{m_mutex}; m_steady_clock_time_point = time_point; } @@ -65,7 +65,7 @@ void TimeZone::SetTotalLocationNameCount(u32 count) { m_total_location_name_count = count; } -void TimeZone::SetRuleVersion(RuleVersion& rule_version) { +void TimeZone::SetRuleVersion(const RuleVersion& rule_version) { std::scoped_lock l{m_mutex}; m_rule_version = rule_version; } @@ -123,7 +123,7 @@ Result TimeZone::ToCalendarTimeWithMyRule(CalendarTime& calendar_time, R_RETURN(ToCalendarTimeImpl(calendar_time, calendar_additional, time, m_my_rule)); } -Result TimeZone::ParseBinary(LocationName& name, std::span<const u8> binary) { +Result TimeZone::ParseBinary(const LocationName& name, std::span<const u8> binary) { std::scoped_lock l{m_mutex}; Tz::Rule tmp_rule{}; @@ -140,11 +140,11 @@ Result TimeZone::ParseBinaryInto(Tz::Rule& out_rule, std::span<const u8> binary) R_RETURN(ParseBinaryImpl(out_rule, binary)); } -Result TimeZone::ToPosixTime(u32& out_count, std::span<s64> out_times, u32 out_times_count, - CalendarTime& calendar, const Tz::Rule& rule) { +Result TimeZone::ToPosixTime(u32& out_count, std::span<s64> out_times, size_t out_times_max_count, + const CalendarTime& calendar, const Tz::Rule& rule) { std::scoped_lock l{m_mutex}; - auto res = ToPosixTimeImpl(out_count, out_times, out_times_count, calendar, rule, -1); + auto res = ToPosixTimeImpl(out_count, out_times, out_times_max_count, calendar, rule, -1); if (res != ResultSuccess) { if (res == ResultTimeZoneNotFound) { @@ -158,10 +158,10 @@ Result TimeZone::ToPosixTime(u32& out_count, std::span<s64> out_times, u32 out_t } Result TimeZone::ToPosixTimeWithMyRule(u32& out_count, std::span<s64> out_times, - u32 out_times_count, CalendarTime& calendar) { + size_t out_times_max_count, const CalendarTime& calendar) { std::scoped_lock l{m_mutex}; - auto res = ToPosixTimeImpl(out_count, out_times, out_times_count, calendar, m_my_rule, -1); + auto res = ToPosixTimeImpl(out_count, out_times, out_times_max_count, calendar, m_my_rule, -1); if (res != ResultSuccess) { if (res == ResultTimeZoneNotFound) { @@ -212,20 +212,23 @@ Result TimeZone::ToCalendarTimeImpl(CalendarTime& out_calendar_time, R_SUCCEED(); } -Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 out_times_count, - CalendarTime& calendar, const Tz::Rule& rule, s32 is_dst) { +Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, + size_t out_times_max_count, const CalendarTime& calendar, + const Tz::Rule& rule, s32 is_dst) { R_TRY(ValidateRule(rule)); - calendar.month -= 1; - calendar.year -= 1900; + CalendarTime local_calendar{calendar}; + + local_calendar.month -= 1; + local_calendar.year -= 1900; Tz::CalendarTimeInternal internal{ - .tm_sec = calendar.second, - .tm_min = calendar.minute, - .tm_hour = calendar.hour, - .tm_mday = calendar.day, - .tm_mon = calendar.month, - .tm_year = calendar.year, + .tm_sec = local_calendar.second, + .tm_min = local_calendar.minute, + .tm_hour = local_calendar.hour, + .tm_mday = local_calendar.day, + .tm_mon = local_calendar.month, + .tm_year = local_calendar.year, .tm_wday = 0, .tm_yday = 0, .tm_isdst = is_dst, @@ -243,9 +246,9 @@ Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 o R_RETURN(ResultTimeZoneNotFound); } - if (internal.tm_sec != calendar.second || internal.tm_min != calendar.minute || - internal.tm_hour != calendar.hour || internal.tm_mday != calendar.day || - internal.tm_mon != calendar.month || internal.tm_year != calendar.year) { + if (internal.tm_sec != local_calendar.second || internal.tm_min != local_calendar.minute || + internal.tm_hour != local_calendar.hour || internal.tm_mday != local_calendar.day || + internal.tm_mon != local_calendar.month || internal.tm_year != local_calendar.year) { R_RETURN(ResultTimeZoneNotFound); } @@ -254,7 +257,7 @@ Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 o } out_times[0] = time; - if (out_times_count < 2) { + if (out_times_max_count < 2) { out_count = 1; R_SUCCEED(); } diff --git a/src/core/hle/service/psc/time/time_zone.h b/src/core/hle/service/psc/time/time_zone.h index 6bd8f2fda..0e4ed6ed0 100644 --- a/src/core/hle/service/psc/time/time_zone.h +++ b/src/core/hle/service/psc/time/time_zone.h @@ -23,9 +23,9 @@ public: m_initialized = true; } - void SetTimePoint(SteadyClockTimePoint& time_point); + void SetTimePoint(const SteadyClockTimePoint& time_point); void SetTotalLocationNameCount(u32 count); - void SetRuleVersion(RuleVersion& rule_version); + void SetRuleVersion(const RuleVersion& rule_version); Result GetLocationName(LocationName& out_name); Result GetTotalLocationCount(u32& out_count); Result GetRuleVersion(RuleVersion& out_rule_version); @@ -36,20 +36,20 @@ public: const Tz::Rule& rule); Result ToCalendarTimeWithMyRule(CalendarTime& calendar_time, CalendarAdditionalInfo& calendar_additional, s64 time); - Result ParseBinary(LocationName& name, std::span<const u8> binary); + Result ParseBinary(const LocationName& name, std::span<const u8> binary); Result ParseBinaryInto(Tz::Rule& out_rule, std::span<const u8> binary); - Result ToPosixTime(u32& out_count, std::span<s64> out_times, u32 out_times_count, - CalendarTime& calendar, const Tz::Rule& rule); - Result ToPosixTimeWithMyRule(u32& out_count, std::span<s64> out_times, u32 out_times_count, - CalendarTime& calendar); + Result ToPosixTime(u32& out_count, std::span<s64> out_times, size_t out_times_max_count, + const CalendarTime& calendar, const Tz::Rule& rule); + Result ToPosixTimeWithMyRule(u32& out_count, std::span<s64> out_times, + size_t out_times_max_count, const CalendarTime& calendar); private: Result ParseBinaryImpl(Tz::Rule& out_rule, std::span<const u8> binary); Result ToCalendarTimeImpl(CalendarTime& out_calendar_time, CalendarAdditionalInfo& out_additional_info, s64 time, const Tz::Rule& rule); - Result ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 out_times_count, - CalendarTime& calendar, const Tz::Rule& rule, s32 is_dst); + Result ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, size_t out_times_max_count, + const CalendarTime& calendar, const Tz::Rule& rule, s32 is_dst); bool m_initialized{}; std::recursive_mutex m_mutex; diff --git a/src/core/hle/service/psc/time/time_zone_service.cpp b/src/core/hle/service/psc/time/time_zone_service.cpp index 9376a0324..2f80030a4 100644 --- a/src/core/hle/service/psc/time/time_zone_service.cpp +++ b/src/core/hle/service/psc/time/time_zone_service.cpp @@ -42,7 +42,7 @@ Result TimeZoneService::GetDeviceLocationName(Out<LocationName> out_location_nam R_RETURN(m_time_zone.GetLocationName(*out_location_name)); } -Result TimeZoneService::SetDeviceLocationName(LocationName& location_name) { +Result TimeZoneService::SetDeviceLocationName(const LocationName& location_name) { LOG_DEBUG(Service_Time, "called. This function is not implemented!"); R_UNLESS(m_can_write_timezone_device_location, ResultPermissionDenied); @@ -62,7 +62,7 @@ Result TimeZoneService::LoadLocationNameList( R_RETURN(ResultNotImplemented); } -Result TimeZoneService::LoadTimeZoneRule(OutRule out_rule, LocationName& location_name) { +Result TimeZoneService::LoadTimeZoneRule(OutRule out_rule, const LocationName& location_name) { LOG_DEBUG(Service_Time, "called. This function is not implemented!"); R_RETURN(ResultNotImplemented); @@ -86,7 +86,7 @@ Result TimeZoneService::GetDeviceLocationNameAndUpdatedTime( } Result TimeZoneService::SetDeviceLocationNameWithTimeZoneRule( - LocationName& location_name, InBuffer<BufferAttr_HipcAutoSelect> binary) { + const LocationName& location_name, InBuffer<BufferAttr_HipcAutoSelect> binary) { LOG_DEBUG(Service_Time, "called. location_name={}", location_name); R_UNLESS(m_can_write_timezone_device_location, ResultPermissionDenied); @@ -138,32 +138,28 @@ Result TimeZoneService::ToCalendarTimeWithMyRule(Out<CalendarTime> out_calendar_ Result TimeZoneService::ToPosixTime(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, CalendarTime& calendar_time, - InRule rule) { + const CalendarTime& calendar_time, InRule rule) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, - "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} " - "out_times_count={}", - calendar_time, *out_count, out_times[0], out_times[1], *out_times_count); + "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} ", + calendar_time, *out_count, out_times[0], out_times[1]); }); R_RETURN( - m_time_zone.ToPosixTime(*out_count, out_times, *out_times_count, calendar_time, *rule)); + m_time_zone.ToPosixTime(*out_count, out_times, out_times.size(), calendar_time, *rule)); } Result TimeZoneService::ToPosixTimeWithMyRule(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, - CalendarTime& calendar_time) { + const CalendarTime& calendar_time) { SCOPE_EXIT({ LOG_DEBUG(Service_Time, - "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} " - "out_times_count={}", - calendar_time, *out_count, out_times[0], out_times[1], *out_times_count); + "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} ", + calendar_time, *out_count, out_times[0], out_times[1]); }); R_RETURN( - m_time_zone.ToPosixTimeWithMyRule(*out_count, out_times, *out_times_count, calendar_time)); + m_time_zone.ToPosixTimeWithMyRule(*out_count, out_times, out_times.size(), calendar_time)); } } // namespace Service::PSC::Time diff --git a/src/core/hle/service/psc/time/time_zone_service.h b/src/core/hle/service/psc/time/time_zone_service.h index 084e3f907..79b6073e5 100644 --- a/src/core/hle/service/psc/time/time_zone_service.h +++ b/src/core/hle/service/psc/time/time_zone_service.h @@ -31,16 +31,16 @@ public: ~TimeZoneService() override = default; Result GetDeviceLocationName(Out<LocationName> out_location_name); - Result SetDeviceLocationName(LocationName& location_name); + Result SetDeviceLocationName(const LocationName& location_name); Result GetTotalLocationNameCount(Out<u32> out_count); Result LoadLocationNameList(Out<u32> out_count, OutArray<LocationName, BufferAttr_HipcMapAlias> out_names, u32 index); - Result LoadTimeZoneRule(OutRule out_rule, LocationName& location_name); + Result LoadTimeZoneRule(OutRule out_rule, const LocationName& location_name); Result GetTimeZoneRuleVersion(Out<RuleVersion> out_rule_version); Result GetDeviceLocationNameAndUpdatedTime(Out<LocationName> location_name, Out<SteadyClockTimePoint> out_time_point); - Result SetDeviceLocationNameWithTimeZoneRule(LocationName& location_name, + Result SetDeviceLocationNameWithTimeZoneRule(const LocationName& location_name, InBuffer<BufferAttr_HipcAutoSelect> binary); Result ParseTimeZoneBinary(OutRule out_rule, InBuffer<BufferAttr_HipcAutoSelect> binary); Result GetDeviceLocationNameOperationEventReadableHandle( @@ -50,10 +50,10 @@ public: Result ToCalendarTimeWithMyRule(Out<CalendarTime> out_calendar_time, Out<CalendarAdditionalInfo> out_additional_info, s64 time); Result ToPosixTime(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, CalendarTime& calendar_time, InRule rule); + const CalendarTime& calendar_time, InRule rule); Result ToPosixTimeWithMyRule(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, - Out<u32> out_times_count, CalendarTime& calendar_time); + const CalendarTime& calendar_time); private: Core::System& m_system; diff --git a/src/core/hle/service/ro/ro.cpp b/src/core/hle/service/ro/ro.cpp index 51196170a..3d3ad2d62 100644 --- a/src/core/hle/service/ro/ro.cpp +++ b/src/core/hle/service/ro/ro.cpp @@ -549,13 +549,13 @@ public: } Result RegisterProcessHandle(ClientProcessId client_pid, - InCopyHandle<Kernel::KProcess>& process) { + InCopyHandle<Kernel::KProcess> process) { // Register the process. R_RETURN(m_ro->RegisterProcess(std::addressof(m_context_id), process.Get(), *client_pid)); } Result RegisterProcessModuleInfo(ClientProcessId client_pid, u64 nrr_address, u64 nrr_size, - InCopyHandle<Kernel::KProcess>& process) { + InCopyHandle<Kernel::KProcess> process) { // Validate the process. R_TRY(m_ro->ValidateProcess(m_context_id, *client_pid)); diff --git a/src/core/hle/service/set/setting_formats/system_settings.h b/src/core/hle/service/set/setting_formats/system_settings.h index ebc373da5..40230182a 100644 --- a/src/core/hle/service/set/setting_formats/system_settings.h +++ b/src/core/hle/service/set/setting_formats/system_settings.h @@ -12,6 +12,7 @@ #include "common/vector_math.h" #include "core/hle/service/set/setting_formats/private_settings.h" #include "core/hle/service/set/settings_types.h" +#include "hid_core/resources/touch_screen/touch_types.h" namespace Service::Set { @@ -257,8 +258,7 @@ struct SystemSettings { std::array<u8, 0x10> analog_stick_user_calibration_left; std::array<u8, 0x10> analog_stick_user_calibration_right; - // nn::settings::system::TouchScreenMode - s32 touch_screen_mode; + TouchScreenMode touch_screen_mode; INSERT_PADDING_BYTES(0x14); // Reserved TvSettings tv_settings; diff --git a/src/core/hle/service/set/system_settings_server.cpp b/src/core/hle/service/set/system_settings_server.cpp index 100cb2db4..7ef4a0ded 100644 --- a/src/core/hle/service/set/system_settings_server.cpp +++ b/src/core/hle/service/set/system_settings_server.cpp @@ -25,7 +25,7 @@ namespace Service::Set { namespace { -constexpr u32 SETTINGS_VERSION{2u}; +constexpr u32 SETTINGS_VERSION{3u}; constexpr auto SETTINGS_MAGIC = Common::MakeMagic('y', 'u', 'z', 'u', '_', 's', 'e', 't'); struct SettingsHeader { u64 magic; @@ -275,8 +275,8 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_) {184, nullptr, "SetPlatformRegion"}, {185, &ISystemSettingsServer::GetHomeMenuSchemeModel, "GetHomeMenuSchemeModel"}, {186, nullptr, "GetMemoryUsageRateFlag"}, - {187, nullptr, "GetTouchScreenMode"}, - {188, nullptr, "SetTouchScreenMode"}, + {187, &ISystemSettingsServer::GetTouchScreenMode, "GetTouchScreenMode"}, + {188, &ISystemSettingsServer::SetTouchScreenMode, "SetTouchScreenMode"}, {189, nullptr, "GetButtonConfigSettingsFull"}, {190, nullptr, "SetButtonConfigSettingsFull"}, {191, nullptr, "GetButtonConfigSettingsEmbedded"}, @@ -1395,6 +1395,28 @@ void ISystemSettingsServer::GetHomeMenuSchemeModel(HLERequestContext& ctx) { rb.Push(0); } +void ISystemSettingsServer::GetTouchScreenMode(HLERequestContext& ctx) { + TouchScreenMode touch_screen_mode{}; + auto res = GetTouchScreenMode(touch_screen_mode); + + LOG_INFO(Service_SET, "called, touch_screen_mode={}", touch_screen_mode); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(res); + rb.PushEnum(touch_screen_mode); +} + +void ISystemSettingsServer::SetTouchScreenMode(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto touch_screen_mode = rp.PopEnum<TouchScreenMode>(); + auto res = SetTouchScreenMode(touch_screen_mode); + + LOG_INFO(Service_SET, "called, touch_screen_mode={}", touch_screen_mode); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(res); +} + void ISystemSettingsServer::GetFieldTestingFlag(HLERequestContext& ctx) { LOG_INFO(Service_SET, "called, field_testing_flag={}", m_system_settings.field_testing_flag); @@ -1670,4 +1692,15 @@ Result ISystemSettingsServer::SetUserSystemClockAutomaticCorrectionUpdatedTime( R_SUCCEED(); } +Result ISystemSettingsServer::GetTouchScreenMode(TouchScreenMode& touch_screen_mode) const { + touch_screen_mode = m_system_settings.touch_screen_mode; + R_SUCCEED(); +} + +Result ISystemSettingsServer::SetTouchScreenMode(TouchScreenMode touch_screen_mode) { + m_system_settings.touch_screen_mode = touch_screen_mode; + SetSaveNeeded(); + R_SUCCEED(); +} + } // namespace Service::Set diff --git a/src/core/hle/service/set/system_settings_server.h b/src/core/hle/service/set/system_settings_server.h index 1982b9723..9a3b36f0c 100644 --- a/src/core/hle/service/set/system_settings_server.h +++ b/src/core/hle/service/set/system_settings_server.h @@ -74,6 +74,8 @@ public: Service::PSC::Time::SteadyClockTimePoint& out_time_point) const; Result SetUserSystemClockAutomaticCorrectionUpdatedTime( const Service::PSC::Time::SteadyClockTimePoint& time_point); + Result GetTouchScreenMode(TouchScreenMode& touch_screen_mode) const; + Result SetTouchScreenMode(TouchScreenMode touch_screen_mode); private: void SetLanguageCode(HLERequestContext& ctx); @@ -154,6 +156,8 @@ private: void GetChineseTraditionalInputMethod(HLERequestContext& ctx); void GetHomeMenuScheme(HLERequestContext& ctx); void GetHomeMenuSchemeModel(HLERequestContext& ctx); + void GetTouchScreenMode(HLERequestContext& ctx); + void SetTouchScreenMode(HLERequestContext& ctx); void GetFieldTestingFlag(HLERequestContext& ctx); void GetPanelCrcMode(HLERequestContext& ctx); void SetPanelCrcMode(HLERequestContext& ctx); diff --git a/src/core/hle/service/sockets/sockets.h b/src/core/hle/service/sockets/sockets.h index f86af01a4..f3ea31bde 100644 --- a/src/core/hle/service/sockets/sockets.h +++ b/src/core/hle/service/sockets/sockets.h @@ -24,6 +24,7 @@ enum class Errno : u32 { CONNRESET = 104, NOTCONN = 107, TIMEDOUT = 110, + CONNREFUSED = 111, INPROGRESS = 115, }; diff --git a/src/core/hle/service/sockets/sockets_translate.cpp b/src/core/hle/service/sockets/sockets_translate.cpp index aed05250c..21bb3e776 100644 --- a/src/core/hle/service/sockets/sockets_translate.cpp +++ b/src/core/hle/service/sockets/sockets_translate.cpp @@ -25,6 +25,8 @@ Errno Translate(Network::Errno value) { return Errno::MFILE; case Network::Errno::PIPE: return Errno::PIPE; + case Network::Errno::CONNREFUSED: + return Errno::CONNREFUSED; case Network::Errno::NOTCONN: return Errno::NOTCONN; case Network::Errno::TIMEDOUT: diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp index 725311c53..7f2af9acc 100644 --- a/src/core/hle/service/vi/display/vi_display.cpp +++ b/src/core/hle/service/vi/display/vi_display.cpp @@ -16,6 +16,7 @@ #include "core/hle/service/nvnflinger/buffer_queue_consumer.h" #include "core/hle/service/nvnflinger/buffer_queue_core.h" #include "core/hle/service/nvnflinger/buffer_queue_producer.h" +#include "core/hle/service/nvnflinger/hardware_composer.h" #include "core/hle/service/nvnflinger/hos_binder_driver_server.h" #include "core/hle/service/vi/display/vi_display.h" #include "core/hle/service/vi/layer/vi_layer.h" @@ -43,6 +44,7 @@ Display::Display(u64 id, std::string name_, KernelHelpers::ServiceContext& service_context_, Core::System& system_) : display_id{id}, name{std::move(name_)}, hos_binder_driver_server{hos_binder_driver_server_}, service_context{service_context_} { + hardware_composer = std::make_unique<Nvnflinger::HardwareComposer>(); vsync_event = service_context.CreateEvent(fmt::format("Display VSync Event {}", id)); } @@ -53,7 +55,7 @@ Display::~Display() { Layer& Display::GetLayer(std::size_t index) { size_t i = 0; for (auto& layer : layers) { - if (!layer->IsOpen()) { + if (!layer->IsOpen() || !layer->IsVisible()) { continue; } @@ -68,7 +70,7 @@ Layer& Display::GetLayer(std::size_t index) { } size_t Display::GetNumLayers() const { - return std::ranges::count_if(layers, [](auto& l) { return l->IsOpen(); }); + return std::ranges::count_if(layers, [](auto& l) { return l->IsOpen() && l->IsVisible(); }); } Kernel::KReadableEvent* Display::GetVSyncEvent() { @@ -81,8 +83,6 @@ void Display::SignalVSyncEvent() { void Display::CreateLayer(u64 layer_id, u32 binder_id, Service::Nvidia::NvCore::Container& nv_core) { - ASSERT_MSG(layers.empty(), "Only one layer is supported per display at the moment"); - auto [core, producer, consumer] = CreateBufferQueue(service_context, nv_core.GetNvMapFile()); auto buffer_item_consumer = std::make_shared<android::BufferItemConsumer>(std::move(consumer)); diff --git a/src/core/hle/service/vi/display/vi_display.h b/src/core/hle/service/vi/display/vi_display.h index 8eb8a5155..220292cff 100644 --- a/src/core/hle/service/vi/display/vi_display.h +++ b/src/core/hle/service/vi/display/vi_display.h @@ -11,9 +11,14 @@ #include "common/common_types.h" #include "core/hle/result.h" +namespace Core { +class System; +} + namespace Kernel { class KEvent; -} +class KReadableEvent; +} // namespace Kernel namespace Service::android { class BufferQueueProducer; @@ -24,8 +29,9 @@ class ServiceContext; } namespace Service::Nvnflinger { +class HardwareComposer; class HosBinderDriverServer; -} +} // namespace Service::Nvnflinger namespace Service::Nvidia::NvCore { class Container; @@ -118,6 +124,10 @@ public: /// const Layer* FindLayer(u64 layer_id) const; + Nvnflinger::HardwareComposer& GetComposer() const { + return *hardware_composer; + } + private: u64 display_id; std::string name; @@ -125,6 +135,7 @@ private: KernelHelpers::ServiceContext& service_context; std::vector<std::unique_ptr<Layer>> layers; + std::unique_ptr<Nvnflinger::HardwareComposer> hardware_composer; Kernel::KEvent* vsync_event{}; bool is_abandoned{}; }; diff --git a/src/core/hle/service/vi/layer/vi_layer.cpp b/src/core/hle/service/vi/layer/vi_layer.cpp index 04e52a23b..493bd6e9e 100644 --- a/src/core/hle/service/vi/layer/vi_layer.cpp +++ b/src/core/hle/service/vi/layer/vi_layer.cpp @@ -9,7 +9,7 @@ Layer::Layer(u64 layer_id_, u32 binder_id_, android::BufferQueueCore& core_, android::BufferQueueProducer& binder_, std::shared_ptr<android::BufferItemConsumer>&& consumer_) : layer_id{layer_id_}, binder_id{binder_id_}, core{core_}, binder{binder_}, - consumer{std::move(consumer_)}, open{false} {} + consumer{std::move(consumer_)}, open{false}, visible{true} {} Layer::~Layer() = default; diff --git a/src/core/hle/service/vi/layer/vi_layer.h b/src/core/hle/service/vi/layer/vi_layer.h index f95e2dc71..b4b031ee7 100644 --- a/src/core/hle/service/vi/layer/vi_layer.h +++ b/src/core/hle/service/vi/layer/vi_layer.h @@ -72,6 +72,14 @@ public: return core; } + bool IsVisible() const { + return visible; + } + + void SetVisibility(bool v) { + visible = v; + } + bool IsOpen() const { return open; } @@ -91,6 +99,7 @@ private: android::BufferQueueProducer& binder; std::shared_ptr<android::BufferItemConsumer> consumer; bool open; + bool visible; }; } // namespace Service::VI diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 1f3d82c57..d508ed28c 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp @@ -195,8 +195,9 @@ private: void GetSharedBufferMemoryHandleId(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; const u64 buffer_id = rp.PopRaw<u64>(); + const u64 aruid = ctx.GetPID(); - LOG_INFO(Service_VI, "called. buffer_id={:#x}", buffer_id); + LOG_INFO(Service_VI, "called. buffer_id={:#x}, aruid={:#x}", buffer_id, aruid); struct OutputParameters { s32 nvmap_handle; @@ -206,7 +207,7 @@ private: OutputParameters out{}; Nvnflinger::SharedMemoryPoolLayout layout{}; const auto result = nvnflinger.GetSystemBufferManager().GetSharedBufferMemoryHandleId( - &out.size, &out.nvmap_handle, &layout, buffer_id, 0); + &out.size, &out.nvmap_handle, &layout, buffer_id, aruid); ctx.WriteBuffer(&layout, sizeof(layout)); @@ -535,6 +536,12 @@ public: RegisterHandlers(functions); } + ~IApplicationDisplayService() { + for (const auto layer_id : stray_layer_ids) { + nvnflinger.DestroyLayer(layer_id); + } + } + private: enum class ConvertedScaleMode : u64 { Freeze = 0, @@ -770,6 +777,7 @@ private: return; } + stray_layer_ids.push_back(*layer_id); const auto buffer_queue_id = nvnflinger.FindBufferQueueId(display_id, *layer_id); if (!buffer_queue_id) { LOG_ERROR(Service_VI, "Buffer queue id not found! display_id={}", display_id); @@ -916,6 +924,7 @@ private: Nvnflinger::Nvnflinger& nvnflinger; Nvnflinger::HosBinderDriverServer& hos_binder_driver_server; + std::vector<u64> stray_layer_ids; bool vsync_event_fetched{false}; }; diff --git a/src/core/internal_network/network.cpp b/src/core/internal_network/network.cpp index a983f23ea..7785c1d16 100644 --- a/src/core/internal_network/network.cpp +++ b/src/core/internal_network/network.cpp @@ -693,20 +693,23 @@ std::pair<SocketBase::AcceptResult, Errno> Socket::Accept() { sockaddr_in addr; socklen_t addrlen = sizeof(addr); - std::vector<WSAPOLLFD> host_pollfds{ - WSAPOLLFD{fd, POLLIN, 0}, - WSAPOLLFD{GetInterruptSocket(), POLLIN, 0}, - }; - - while (true) { - const int pollres = - WSAPoll(host_pollfds.data(), static_cast<ULONG>(host_pollfds.size()), -1); - if (host_pollfds[1].revents != 0) { - // Interrupt signaled before a client could be accepted, break - return {AcceptResult{}, Errno::AGAIN}; - } - if (pollres > 0) { - break; + const bool wait_for_accept = !is_non_blocking; + if (wait_for_accept) { + std::vector<WSAPOLLFD> host_pollfds{ + WSAPOLLFD{fd, POLLIN, 0}, + WSAPOLLFD{GetInterruptSocket(), POLLIN, 0}, + }; + + while (true) { + const int pollres = + WSAPoll(host_pollfds.data(), static_cast<ULONG>(host_pollfds.size()), -1); + if (host_pollfds[1].revents != 0) { + // Interrupt signaled before a client could be accepted, break + return {AcceptResult{}, Errno::AGAIN}; + } + if (pollres > 0) { + break; + } } } @@ -913,6 +916,7 @@ Errno Socket::SetRcvTimeo(u32 value) { Errno Socket::SetNonBlock(bool enable) { if (EnableNonBlock(fd, enable)) { + is_non_blocking = enable; return Errno::SUCCESS; } return GetAndLogLastError(); diff --git a/src/core/internal_network/sockets.h b/src/core/internal_network/sockets.h index 4ba51f62c..3a32dff75 100644 --- a/src/core/internal_network/sockets.h +++ b/src/core/internal_network/sockets.h @@ -166,6 +166,9 @@ public: bool IsOpened() const override; void HandleProxyPacket(const ProxyPacket& packet) override; + +private: + bool is_non_blocking = false; }; std::pair<s32, Errno> Poll(std::vector<PollFD>& poll_fds, s32 timeout); diff --git a/src/frontend_common/config.cpp b/src/frontend_common/config.cpp index 905f35118..d34624d28 100644 --- a/src/frontend_common/config.cpp +++ b/src/frontend_common/config.cpp @@ -190,9 +190,9 @@ void Config::ReadTouchscreenValues() { Settings::values.touchscreen.rotation_angle = static_cast<u32>(ReadIntegerSetting(std::string("touchscreen_angle"), 0)); Settings::values.touchscreen.diameter_x = - static_cast<u32>(ReadIntegerSetting(std::string("touchscreen_diameter_x"), 15)); + static_cast<u32>(ReadIntegerSetting(std::string("touchscreen_diameter_x"), 90)); Settings::values.touchscreen.diameter_y = - static_cast<u32>(ReadIntegerSetting(std::string("touchscreen_diameter_y"), 15)); + static_cast<u32>(ReadIntegerSetting(std::string("touchscreen_diameter_y"), 90)); } void Config::ReadAudioValues() { @@ -478,9 +478,9 @@ void Config::SaveTouchscreenValues() { WriteIntegerSetting(std::string("touchscreen_angle"), touchscreen.rotation_angle, std::make_optional(static_cast<u32>(0))); WriteIntegerSetting(std::string("touchscreen_diameter_x"), touchscreen.diameter_x, - std::make_optional(static_cast<u32>(15))); + std::make_optional(static_cast<u32>(90))); WriteIntegerSetting(std::string("touchscreen_diameter_y"), touchscreen.diameter_y, - std::make_optional(static_cast<u32>(15))); + std::make_optional(static_cast<u32>(90))); } void Config::SaveMotionTouchValues() { diff --git a/src/hid_core/CMakeLists.txt b/src/hid_core/CMakeLists.txt index 64cd6e726..2699e1599 100644 --- a/src/hid_core/CMakeLists.txt +++ b/src/hid_core/CMakeLists.txt @@ -99,9 +99,14 @@ add_library(hid_core STATIC resources/system_buttons/system_button_types.h resources/touch_screen/gesture.cpp resources/touch_screen/gesture.h - resources/touch_screen/gesture_types.h + resources/touch_screen/gesture_handler.cpp + resources/touch_screen/gesture_handler.h resources/touch_screen/touch_screen.cpp resources/touch_screen/touch_screen.h + resources/touch_screen/touch_screen_driver.cpp + resources/touch_screen/touch_screen_driver.h + resources/touch_screen/touch_screen_resource.cpp + resources/touch_screen/touch_screen_resource.h resources/touch_screen/touch_types.h resources/unique_pad/unique_pad.cpp resources/unique_pad/unique_pad.h diff --git a/src/hid_core/hid_result.h b/src/hid_core/hid_result.h index df9b28c9a..c8dd07bfe 100644 --- a/src/hid_core/hid_result.h +++ b/src/hid_core/hid_result.h @@ -8,6 +8,10 @@ namespace Service::HID { constexpr Result PalmaResultSuccess{ErrorModule::HID, 0}; + +constexpr Result ResultTouchNotInitialized{ErrorModule::HID, 41}; +constexpr Result ResultTouchOverflow{ErrorModule::HID, 42}; + constexpr Result NpadInvalidHandle{ErrorModule::HID, 100}; constexpr Result NpadDeviceIndexOutOfRange{ErrorModule::HID, 107}; @@ -23,6 +27,10 @@ constexpr Result InvalidSixAxisFusionRange{ErrorModule::HID, 423}; constexpr Result ResultNfcIsNotReady{ErrorModule::HID, 461}; constexpr Result ResultNfcXcdHandleIsNotInitialized{ErrorModule::HID, 464}; constexpr Result ResultIrSensorIsNotReady{ErrorModule::HID, 501}; + +constexpr Result ResultGestureOverflow{ErrorModule::HID, 522}; +constexpr Result ResultGestureNotInitialized{ErrorModule::HID, 523}; + constexpr Result ResultMcuIsNotReady{ErrorModule::HID, 541}; constexpr Result NpadIsDualJoycon{ErrorModule::HID, 601}; diff --git a/src/hid_core/hid_types.h b/src/hid_core/hid_types.h index b310ab72d..1b2fc6295 100644 --- a/src/hid_core/hid_types.h +++ b/src/hid_core/hid_types.h @@ -299,12 +299,6 @@ enum class GyroscopeZeroDriftMode : u32 { Tight = 2, }; -// This is nn::settings::system::TouchScreenMode -enum class TouchScreenMode : u32 { - Stylus = 0, - Standard = 1, -}; - // This is nn::hid::TouchScreenModeForNx enum class TouchScreenModeForNx : u8 { UseSystemSetting, @@ -354,18 +348,6 @@ struct TouchAttribute { }; static_assert(sizeof(TouchAttribute) == 0x4, "TouchAttribute is an invalid size"); -// This is nn::hid::TouchState -struct TouchState { - u64 delta_time{}; - TouchAttribute attribute{}; - u32 finger{}; - Common::Point<u32> position{}; - u32 diameter_x{}; - u32 diameter_y{}; - u32 rotation_angle{}; -}; -static_assert(sizeof(TouchState) == 0x28, "Touchstate is an invalid size"); - struct TouchFinger { u64 last_touch{}; Common::Point<float> position{}; @@ -422,7 +404,10 @@ struct NpadPowerInfo { static_assert(sizeof(NpadPowerInfo) == 0xC, "NpadPowerInfo is an invalid size"); struct LedPattern { - explicit LedPattern(u64 light1, u64 light2, u64 light3, u64 light4) { + LedPattern() { + raw = 0; + } + LedPattern(u64 light1, u64 light2, u64 light3, u64 light4) { position1.Assign(light1); position2.Assign(light2); position3.Assign(light3); @@ -753,4 +738,14 @@ struct UniquePadId { }; static_assert(sizeof(UniquePadId) == 0x8, "UniquePadId is an invalid size"); +// This is nn::hid::system::FirmwareVersion +struct FirmwareVersion { + u8 major; + u8 minor; + u8 micro; + u8 revision; + std::array<char, 0xc> device_identifier; +}; +static_assert(sizeof(FirmwareVersion) == 0x10, "FirmwareVersion is an invalid size"); + } // namespace Core::HID diff --git a/src/hid_core/resource_manager.cpp b/src/hid_core/resource_manager.cpp index e78665d31..68ce2c7ae 100644 --- a/src/hid_core/resource_manager.cpp +++ b/src/hid_core/resource_manager.cpp @@ -15,6 +15,7 @@ #include "hid_core/resources/applet_resource.h" #include "hid_core/resources/debug_pad/debug_pad.h" #include "hid_core/resources/digitizer/digitizer.h" +#include "hid_core/resources/hid_firmware_settings.h" #include "hid_core/resources/keyboard/keyboard.h" #include "hid_core/resources/mouse/debug_mouse.h" #include "hid_core/resources/mouse/mouse.h" @@ -29,6 +30,8 @@ #include "hid_core/resources/system_buttons/sleep_button.h" #include "hid_core/resources/touch_screen/gesture.h" #include "hid_core/resources/touch_screen/touch_screen.h" +#include "hid_core/resources/touch_screen/touch_screen_driver.h" +#include "hid_core/resources/touch_screen/touch_screen_resource.h" #include "hid_core/resources/unique_pad/unique_pad.h" #include "hid_core/resources/vibration/gc_vibration_device.h" #include "hid_core/resources/vibration/n64_vibration_device.h" @@ -45,12 +48,16 @@ constexpr auto default_update_ns = std::chrono::nanoseconds{4 * 1000 * 1000}; // constexpr auto mouse_keyboard_update_ns = std::chrono::nanoseconds{8 * 1000 * 1000}; // (8ms, 125Hz) constexpr auto motion_update_ns = std::chrono::nanoseconds{5 * 1000 * 1000}; // (5ms, 200Hz) -ResourceManager::ResourceManager(Core::System& system_) - : system{system_}, service_context{system_, "hid"} { +ResourceManager::ResourceManager(Core::System& system_, + std::shared_ptr<HidFirmwareSettings> settings) + : firmware_settings{settings}, system{system_}, service_context{system_, "hid"} { applet_resource = std::make_shared<AppletResource>(system); } -ResourceManager::~ResourceManager() = default; +ResourceManager::~ResourceManager() { + system.CoreTiming().UnscheduleEvent(touch_update_event); + input_event->Finalize(); +}; void ResourceManager::Initialize() { if (is_initialized) { @@ -59,7 +66,9 @@ void ResourceManager::Initialize() { system.HIDCore().ReloadInputDevices(); - handheld_config = std::make_shared<HandheldConfig>(); + input_event = service_context.CreateEvent("ResourceManager:InputEvent"); + + InitializeHandheldConfig(); InitializeHidCommonSampler(); InitializeTouchScreenSampler(); InitializeConsoleSixAxisSampler(); @@ -154,6 +163,7 @@ Result ResourceManager::CreateAppletResource(u64 aruid) { npad->Activate(); six_axis->Activate(); touch_screen->Activate(); + gesture->Activate(); return GetNpad()->ActivateNpadResource(aruid); } @@ -163,6 +173,17 @@ Result ResourceManager::CreateAppletResourceImpl(u64 aruid) { return applet_resource->CreateAppletResource(aruid); } +void ResourceManager::InitializeHandheldConfig() { + handheld_config = std::make_shared<HandheldConfig>(); + handheld_config->is_handheld_hid_enabled = true; + handheld_config->is_joycon_rail_enabled = true; + handheld_config->is_force_handheld_style_vibration = false; + handheld_config->is_force_handheld = false; + if (firmware_settings->IsHandheldForced()) { + handheld_config->is_joycon_rail_enabled = false; + } +} + void ResourceManager::InitializeHidCommonSampler() { debug_pad = std::make_shared<DebugPad>(system.HIDCore()); mouse = std::make_shared<Mouse>(system.HIDCore()); @@ -170,7 +191,6 @@ void ResourceManager::InitializeHidCommonSampler() { keyboard = std::make_shared<Keyboard>(system.HIDCore()); unique_pad = std::make_shared<UniquePad>(system.HIDCore()); npad = std::make_shared<NPad>(system.HIDCore(), service_context); - gesture = std::make_shared<Gesture>(system.HIDCore()); home_button = std::make_shared<HomeButton>(system.HIDCore()); sleep_button = std::make_shared<SleepButton>(system.HIDCore()); capture_button = std::make_shared<CaptureButton>(system.HIDCore()); @@ -185,7 +205,8 @@ void ResourceManager::InitializeHidCommonSampler() { const auto settings = system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true); - npad->SetNpadExternals(applet_resource, &shared_mutex, handheld_config, settings); + npad->SetNpadExternals(applet_resource, &shared_mutex, handheld_config, input_event, + &input_mutex, settings); six_axis->SetAppletResource(applet_resource, &shared_mutex); mouse->SetAppletResource(applet_resource, &shared_mutex); @@ -196,11 +217,25 @@ void ResourceManager::InitializeHidCommonSampler() { } void ResourceManager::InitializeTouchScreenSampler() { - gesture = std::make_shared<Gesture>(system.HIDCore()); - touch_screen = std::make_shared<TouchScreen>(system.HIDCore()); + // This is nn.hid.TouchScreenSampler + touch_resource = std::make_shared<TouchResource>(system); + touch_driver = std::make_shared<TouchDriver>(system.HIDCore()); + touch_screen = std::make_shared<TouchScreen>(touch_resource); + gesture = std::make_shared<Gesture>(touch_resource); + + touch_update_event = Core::Timing::CreateEvent( + "HID::TouchUpdateCallback", + [this](s64 time, + std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { + touch_resource->OnTouchUpdate(time); + return std::nullopt; + }); - touch_screen->SetAppletResource(applet_resource, &shared_mutex); - gesture->SetAppletResource(applet_resource, &shared_mutex); + touch_resource->SetTouchDriver(touch_driver); + touch_resource->SetAppletResource(applet_resource, &shared_mutex); + touch_resource->SetInputEvent(input_event, &input_mutex); + touch_resource->SetHandheldConfig(handheld_config); + touch_resource->SetTimerEvent(touch_update_event); } void ResourceManager::InitializeConsoleSixAxisSampler() { @@ -388,13 +423,15 @@ Result ResourceManager::SendVibrationValue(u64 aruid, return result; } +Result ResourceManager::GetTouchScreenFirmwareVersion(Core::HID::FirmwareVersion& firmware) const { + return ResultSuccess; +} + void ResourceManager::UpdateControllers(std::chrono::nanoseconds ns_late) { auto& core_timing = system.CoreTiming(); debug_pad->OnUpdate(core_timing); digitizer->OnUpdate(core_timing); unique_pad->OnUpdate(core_timing); - gesture->OnUpdate(core_timing); - touch_screen->OnUpdate(core_timing); palma->OnUpdate(core_timing); home_button->OnUpdate(core_timing); sleep_button->OnUpdate(core_timing); diff --git a/src/hid_core/resource_manager.h b/src/hid_core/resource_manager.h index 128e00125..0bfe09511 100644 --- a/src/hid_core/resource_manager.h +++ b/src/hid_core/resource_manager.h @@ -11,6 +11,7 @@ class System; } namespace Core::HID { +struct FirmwareVersion; struct VibrationDeviceHandle; struct VibrationValue; struct VibrationDeviceInfo; @@ -21,8 +22,9 @@ struct EventType; } namespace Kernel { +class KEvent; class KSharedMemory; -} +} // namespace Kernel namespace Service::HID { class AppletResource; @@ -33,6 +35,7 @@ class DebugMouse; class DebugPad; class Digitizer; class Gesture; +class HidFirmwareSettings; class HomeButton; class Keyboard; class Mouse; @@ -42,6 +45,8 @@ class SevenSixAxis; class SixAxis; class SleepButton; class TouchScreen; +class TouchDriver; +class TouchResource; class UniquePad; class NpadVibrationBase; class NpadN64VibrationDevice; @@ -52,7 +57,7 @@ struct HandheldConfig; class ResourceManager { public: - explicit ResourceManager(Core::System& system_); + explicit ResourceManager(Core::System& system_, std::shared_ptr<HidFirmwareSettings> settings); ~ResourceManager(); void Initialize(); @@ -102,6 +107,8 @@ public: Result SendVibrationValue(u64 aruid, const Core::HID::VibrationDeviceHandle& handle, const Core::HID::VibrationValue& value); + Result GetTouchScreenFirmwareVersion(Core::HID::FirmwareVersion& firmware) const; + void UpdateControllers(std::chrono::nanoseconds ns_late); void UpdateNpad(std::chrono::nanoseconds ns_late); void UpdateMouseKeyboard(std::chrono::nanoseconds ns_late); @@ -109,6 +116,7 @@ public: private: Result CreateAppletResourceImpl(u64 aruid); + void InitializeHandheldConfig(); void InitializeHidCommonSampler(); void InitializeTouchScreenSampler(); void InitializeConsoleSixAxisSampler(); @@ -117,37 +125,46 @@ private: bool is_initialized{false}; mutable std::recursive_mutex shared_mutex; - std::shared_ptr<AppletResource> applet_resource = nullptr; - - std::shared_ptr<CaptureButton> capture_button = nullptr; - std::shared_ptr<ConsoleSixAxis> console_six_axis = nullptr; - std::shared_ptr<DebugMouse> debug_mouse = nullptr; - std::shared_ptr<DebugPad> debug_pad = nullptr; - std::shared_ptr<Digitizer> digitizer = nullptr; - std::shared_ptr<Gesture> gesture = nullptr; - std::shared_ptr<HomeButton> home_button = nullptr; - std::shared_ptr<Keyboard> keyboard = nullptr; - std::shared_ptr<Mouse> mouse = nullptr; - std::shared_ptr<NPad> npad = nullptr; - std::shared_ptr<Palma> palma = nullptr; - std::shared_ptr<SevenSixAxis> seven_six_axis = nullptr; - std::shared_ptr<SixAxis> six_axis = nullptr; - std::shared_ptr<SleepButton> sleep_button = nullptr; - std::shared_ptr<TouchScreen> touch_screen = nullptr; - std::shared_ptr<UniquePad> unique_pad = nullptr; - - std::shared_ptr<HandheldConfig> handheld_config = nullptr; + std::shared_ptr<AppletResource> applet_resource{nullptr}; + + mutable std::mutex input_mutex; + Kernel::KEvent* input_event{nullptr}; + + std::shared_ptr<HandheldConfig> handheld_config{nullptr}; + std::shared_ptr<HidFirmwareSettings> firmware_settings{nullptr}; + + std::shared_ptr<CaptureButton> capture_button{nullptr}; + std::shared_ptr<ConsoleSixAxis> console_six_axis{nullptr}; + std::shared_ptr<DebugMouse> debug_mouse{nullptr}; + std::shared_ptr<DebugPad> debug_pad{nullptr}; + std::shared_ptr<Digitizer> digitizer{nullptr}; + std::shared_ptr<HomeButton> home_button{nullptr}; + std::shared_ptr<Keyboard> keyboard{nullptr}; + std::shared_ptr<Mouse> mouse{nullptr}; + std::shared_ptr<NPad> npad{nullptr}; + std::shared_ptr<Palma> palma{nullptr}; + std::shared_ptr<SevenSixAxis> seven_six_axis{nullptr}; + std::shared_ptr<SixAxis> six_axis{nullptr}; + std::shared_ptr<SleepButton> sleep_button{nullptr}; + std::shared_ptr<UniquePad> unique_pad{nullptr}; // TODO: Create these resources - // std::shared_ptr<AudioControl> audio_control = nullptr; - // std::shared_ptr<ButtonConfig> button_config = nullptr; - // std::shared_ptr<Config> config = nullptr; - // std::shared_ptr<Connection> connection = nullptr; - // std::shared_ptr<CustomConfig> custom_config = nullptr; - // std::shared_ptr<Digitizer> digitizer = nullptr; - // std::shared_ptr<Hdls> hdls = nullptr; - // std::shared_ptr<PlayReport> play_report = nullptr; - // std::shared_ptr<Rail> rail = nullptr; + // std::shared_ptr<AudioControl> audio_control{nullptr}; + // std::shared_ptr<ButtonConfig> button_config{nullptr}; + // std::shared_ptr<Config> config{nullptr}; + // std::shared_ptr<Connection> connection{nullptr}; + // std::shared_ptr<CustomConfig> custom_config{nullptr}; + // std::shared_ptr<Digitizer> digitizer{nullptr}; + // std::shared_ptr<Hdls> hdls{nullptr}; + // std::shared_ptr<PlayReport> play_report{nullptr}; + // std::shared_ptr<Rail> rail{nullptr}; + + // Touch Resources + std::shared_ptr<Gesture> gesture{nullptr}; + std::shared_ptr<TouchScreen> touch_screen{nullptr}; + std::shared_ptr<TouchResource> touch_resource{nullptr}; + std::shared_ptr<TouchDriver> touch_driver{nullptr}; + std::shared_ptr<Core::Timing::EventType> touch_update_event{nullptr}; Core::System& system; KernelHelpers::ServiceContext service_context; @@ -162,12 +179,12 @@ public: private: void GetSharedMemoryHandle(HLERequestContext& ctx); - std::shared_ptr<Core::Timing::EventType> npad_update_event; - std::shared_ptr<Core::Timing::EventType> default_update_event; - std::shared_ptr<Core::Timing::EventType> mouse_keyboard_update_event; - std::shared_ptr<Core::Timing::EventType> motion_update_event; + std::shared_ptr<Core::Timing::EventType> npad_update_event{nullptr}; + std::shared_ptr<Core::Timing::EventType> default_update_event{nullptr}; + std::shared_ptr<Core::Timing::EventType> mouse_keyboard_update_event{nullptr}; + std::shared_ptr<Core::Timing::EventType> motion_update_event{nullptr}; - u64 aruid; + u64 aruid{}; std::shared_ptr<ResourceManager> resource_manager; }; diff --git a/src/hid_core/resources/applet_resource.cpp b/src/hid_core/resources/applet_resource.cpp index db4134037..243beb1c7 100644 --- a/src/hid_core/resources/applet_resource.cpp +++ b/src/hid_core/resources/applet_resource.cpp @@ -118,6 +118,12 @@ void AppletResource::UnregisterAppletResourceUserId(u64 aruid) { data[index].aruid = 0; registration_list.flag[index] = RegistrationStatus::PendingDelete; + + for (std::size_t i = 0; i < AruidIndexMax; i++) { + if (registration_list.flag[i] == RegistrationStatus::Initialized) { + active_aruid = registration_list.aruid[i]; + } + } } void AppletResource::FreeAppletResourceId(u64 aruid) { diff --git a/src/hid_core/resources/applet_resource.h b/src/hid_core/resources/applet_resource.h index e9710d306..4a5416fb2 100644 --- a/src/hid_core/resources/applet_resource.h +++ b/src/hid_core/resources/applet_resource.h @@ -13,11 +13,12 @@ namespace Core { class System; -} +} // namespace Core namespace Kernel { +class KEvent; class KSharedMemory; -} +} // namespace Kernel namespace Service::HID { struct SharedMemoryFormat; @@ -73,7 +74,8 @@ struct AppletResourceHolder { std::recursive_mutex* shared_mutex{nullptr}; NPadResource* shared_npad_resource{nullptr}; std::shared_ptr<HandheldConfig> handheld_config{nullptr}; - long* handle_1; + Kernel::KEvent* input_event{nullptr}; + std::mutex* input_mutex{nullptr}; }; class AppletResource { diff --git a/src/hid_core/resources/npad/npad.cpp b/src/hid_core/resources/npad/npad.cpp index cde84b1bb..1a58eff4a 100644 --- a/src/hid_core/resources/npad/npad.cpp +++ b/src/hid_core/resources/npad/npad.cpp @@ -956,17 +956,6 @@ Result NPad::SwapNpadAssignment(u64 aruid, Core::HID::NpadIdType npad_id_1, return ResultSuccess; } -Result NPad::GetLedPattern(Core::HID::NpadIdType npad_id, Core::HID::LedPattern& pattern) const { - if (!IsNpadIdValid(npad_id)) { - LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); - return ResultInvalidNpadId; - } - const auto aruid = applet_resource_holder.applet_resource->GetActiveAruid(); - const auto& controller = GetControllerFromNpadIdType(aruid, npad_id).device; - pattern = controller->GetLedPattern(); - return ResultSuccess; -} - Result NPad::IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid, Core::HID::NpadIdType npad_id) const { std::scoped_lock lock{mutex}; @@ -1081,11 +1070,14 @@ void NPad::UnregisterAppletResourceUserId(u64 aruid) { void NPad::SetNpadExternals(std::shared_ptr<AppletResource> resource, std::recursive_mutex* shared_mutex, std::shared_ptr<HandheldConfig> handheld_config, + Kernel::KEvent* input_event, std::mutex* input_mutex, std::shared_ptr<Service::Set::ISystemSettingsServer> settings) { applet_resource_holder.applet_resource = resource; applet_resource_holder.shared_mutex = shared_mutex; applet_resource_holder.shared_npad_resource = &npad_resource; applet_resource_holder.handheld_config = handheld_config; + applet_resource_holder.input_event = input_event; + applet_resource_holder.input_mutex = input_mutex; vibration_handler.SetSettingsService(settings); diff --git a/src/hid_core/resources/npad/npad.h b/src/hid_core/resources/npad/npad.h index 502cb9b55..4e26ed2e8 100644 --- a/src/hid_core/resources/npad/npad.h +++ b/src/hid_core/resources/npad/npad.h @@ -97,8 +97,6 @@ public: Result ResetIsSixAxisSensorDeviceNewlyAssigned( u64 aruid, const Core::HID::SixAxisSensorHandle& sixaxis_handle); - Result GetLedPattern(Core::HID::NpadIdType npad_id, Core::HID::LedPattern& pattern) const; - Result IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid, Core::HID::NpadIdType npad_id) const; Result EnableUnintendedHomeButtonInputProtection(u64 aruid, Core::HID::NpadIdType npad_id, @@ -133,6 +131,7 @@ public: void SetNpadExternals(std::shared_ptr<AppletResource> resource, std::recursive_mutex* shared_mutex, std::shared_ptr<HandheldConfig> handheld_config, + Kernel::KEvent* input_event, std::mutex* input_mutex, std::shared_ptr<Service::Set::ISystemSettingsServer> settings); AppletDetailedUiType GetAppletDetailedUiType(Core::HID::NpadIdType npad_id); @@ -206,9 +205,6 @@ private: std::array<AbstractPad, MaxSupportedNpadIdTypes> abstracted_pads; NpadVibration vibration_handler{}; - Kernel::KEvent* input_event{nullptr}; - std::mutex* input_mutex{nullptr}; - std::atomic<u64> press_state{}; std::array<std::array<NpadControllerData, MaxSupportedNpadIdTypes>, AruidIndexMax> controller_data{}; diff --git a/src/hid_core/resources/npad/npad_resource.cpp b/src/hid_core/resources/npad/npad_resource.cpp index ea9fc14ed..8dd86b58e 100644 --- a/src/hid_core/resources/npad/npad_resource.cpp +++ b/src/hid_core/resources/npad/npad_resource.cpp @@ -72,6 +72,12 @@ void NPadResource::UnregisterAppletResourceUserId(u64 aruid) { state[aruid_index] = {}; registration_list.flag[aruid_index] = RegistrationStatus::PendingDelete; } + + for (std::size_t i = 0; i < AruidIndexMax; i++) { + if (registration_list.flag[i] == RegistrationStatus::Initialized) { + active_data_aruid = registration_list.aruid[i]; + } + } } void NPadResource::DestroyStyleSetUpdateEvents(u64 aruid) { diff --git a/src/hid_core/resources/touch_screen/gesture.cpp b/src/hid_core/resources/touch_screen/gesture.cpp index 0ecc0941f..eaa0cc7d0 100644 --- a/src/hid_core/resources/touch_screen/gesture.cpp +++ b/src/hid_core/resources/touch_screen/gesture.cpp @@ -1,366 +1,53 @@ -// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later -#include "common/math_util.h" -#include "common/settings.h" -#include "core/frontend/emu_window.h" -#include "hid_core/frontend/emulated_console.h" -#include "hid_core/hid_core.h" -#include "hid_core/resources/applet_resource.h" -#include "hid_core/resources/shared_memory_format.h" #include "hid_core/resources/touch_screen/gesture.h" +#include "hid_core/resources/touch_screen/touch_screen_resource.h" namespace Service::HID { -// HW is around 700, value is set to 400 to make it easier to trigger with mouse -constexpr f32 swipe_threshold = 400.0f; // Threshold in pixels/s -constexpr f32 angle_threshold = 0.015f; // Threshold in radians -constexpr f32 pinch_threshold = 0.5f; // Threshold in pixels -constexpr f32 press_delay = 0.5f; // Time in seconds -constexpr f32 double_tap_delay = 0.35f; // Time in seconds -constexpr f32 Square(s32 num) { - return static_cast<f32>(num * num); -} +Gesture::Gesture(std::shared_ptr<TouchResource> resource) : touch_resource{resource} {} -Gesture::Gesture(Core::HID::HIDCore& hid_core_) : ControllerBase(hid_core_) { - console = hid_core.GetEmulatedConsole(); -} Gesture::~Gesture() = default; -void Gesture::OnInit() { - std::scoped_lock shared_lock{*shared_mutex}; - const u64 aruid = applet_resource->GetActiveAruid(); - auto* data = applet_resource->GetAruidData(aruid); - - if (data == nullptr || !data->flag.is_assigned) { - return; - } - - shared_memory = &data->shared_memory_format->gesture; - shared_memory->gesture_lifo.buffer_count = 0; - shared_memory->gesture_lifo.buffer_tail = 0; - force_update = true; -} - -void Gesture::OnRelease() {} - -void Gesture::OnUpdate(const Core::Timing::CoreTiming& core_timing) { - std::scoped_lock shared_lock{*shared_mutex}; - const u64 aruid = applet_resource->GetActiveAruid(); - auto* data = applet_resource->GetAruidData(aruid); - - if (data == nullptr || !data->flag.is_assigned) { - return; - } - - shared_memory = &data->shared_memory_format->gesture; - - if (!IsControllerActivated()) { - shared_memory->gesture_lifo.buffer_count = 0; - shared_memory->gesture_lifo.buffer_tail = 0; - return; - } - - ReadTouchInput(); - - GestureProperties gesture = GetGestureProperties(); - f32 time_difference = - static_cast<f32>(shared_memory->gesture_lifo.timestamp - last_update_timestamp) / - (1000 * 1000 * 1000); - - // Only update if necessary - if (!ShouldUpdateGesture(gesture, time_difference)) { - return; - } - - last_update_timestamp = shared_memory->gesture_lifo.timestamp; - UpdateGestureSharedMemory(gesture, time_difference); -} - -void Gesture::ReadTouchInput() { - if (!Settings::values.touchscreen.enabled) { - fingers = {}; - return; - } - - const auto touch_status = console->GetTouch(); - for (std::size_t id = 0; id < fingers.size(); ++id) { - fingers[id] = touch_status[id]; - } -} - -bool Gesture::ShouldUpdateGesture(const GestureProperties& gesture, f32 time_difference) { - const auto& last_entry = GetLastGestureEntry(); - if (force_update) { - force_update = false; - return true; - } - - // Update if coordinates change - for (size_t id = 0; id < MAX_POINTS; id++) { - if (gesture.points[id] != last_gesture.points[id]) { - return true; - } - } - - // Update on press and hold event after 0.5 seconds - if (last_entry.type == GestureType::Touch && last_entry.point_count == 1 && - time_difference > press_delay) { - return enable_press_and_tap; - } - - return false; -} - -void Gesture::UpdateGestureSharedMemory(GestureProperties& gesture, f32 time_difference) { - GestureType type = GestureType::Idle; - GestureAttribute attributes{}; - - const auto& last_entry = shared_memory->gesture_lifo.ReadCurrentEntry().state; - - // Reset next state to default - next_state.sampling_number = last_entry.sampling_number + 1; - next_state.delta = {}; - next_state.vel_x = 0; - next_state.vel_y = 0; - next_state.direction = GestureDirection::None; - next_state.rotation_angle = 0; - next_state.scale = 0; - - if (gesture.active_points > 0) { - if (last_gesture.active_points == 0) { - NewGesture(gesture, type, attributes); - } else { - UpdateExistingGesture(gesture, type, time_difference); - } - } else { - EndGesture(gesture, last_gesture, type, attributes, time_difference); - } - - // Apply attributes - next_state.detection_count = gesture.detection_count; - next_state.type = type; - next_state.attributes = attributes; - next_state.pos = gesture.mid_point; - next_state.point_count = static_cast<s32>(gesture.active_points); - next_state.points = gesture.points; - last_gesture = gesture; - - shared_memory->gesture_lifo.WriteNextEntry(next_state); -} - -void Gesture::NewGesture(GestureProperties& gesture, GestureType& type, - GestureAttribute& attributes) { - const auto& last_entry = GetLastGestureEntry(); - - gesture.detection_count++; - type = GestureType::Touch; - - // New touch after cancel is not considered new - if (last_entry.type != GestureType::Cancel) { - attributes.is_new_touch.Assign(1); - enable_press_and_tap = true; - } -} - -void Gesture::UpdateExistingGesture(GestureProperties& gesture, GestureType& type, - f32 time_difference) { - const auto& last_entry = GetLastGestureEntry(); +Result Gesture::Activate() { + std::scoped_lock lock{mutex}; - // Promote to pan type if touch moved - for (size_t id = 0; id < MAX_POINTS; id++) { - if (gesture.points[id] != last_gesture.points[id]) { - type = GestureType::Pan; - break; - } + // TODO: Result result = CreateThread(); + Result result = ResultSuccess; + if (result.IsError()) { + return result; } - // Number of fingers changed cancel the last event and clear data - if (gesture.active_points != last_gesture.active_points) { - type = GestureType::Cancel; - enable_press_and_tap = false; - gesture.active_points = 0; - gesture.mid_point = {}; - gesture.points.fill({}); - return; - } - - // Calculate extra parameters of panning - if (type == GestureType::Pan) { - UpdatePanEvent(gesture, last_gesture, type, time_difference); - return; - } + result = touch_resource->ActivateGesture(); - // Promote to press type - if (last_entry.type == GestureType::Touch) { - type = GestureType::Press; + if (result.IsError()) { + // TODO: StopThread(); } -} - -void Gesture::EndGesture(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, GestureAttribute& attributes, f32 time_difference) { - const auto& last_entry = GetLastGestureEntry(); - if (last_gesture_props.active_points != 0) { - switch (last_entry.type) { - case GestureType::Touch: - if (enable_press_and_tap) { - SetTapEvent(gesture, last_gesture_props, type, attributes); - return; - } - type = GestureType::Cancel; - force_update = true; - break; - case GestureType::Press: - case GestureType::Tap: - case GestureType::Swipe: - case GestureType::Pinch: - case GestureType::Rotate: - type = GestureType::Complete; - force_update = true; - break; - case GestureType::Pan: - EndPanEvent(gesture, last_gesture_props, type, time_difference); - break; - default: - break; - } - return; - } - if (last_entry.type == GestureType::Complete || last_entry.type == GestureType::Cancel) { - gesture.detection_count++; - } + return result; } -void Gesture::SetTapEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, GestureAttribute& attributes) { - type = GestureType::Tap; - gesture = last_gesture_props; - force_update = true; - f32 tap_time_difference = - static_cast<f32>(last_update_timestamp - last_tap_timestamp) / (1000 * 1000 * 1000); - last_tap_timestamp = last_update_timestamp; - if (tap_time_difference < double_tap_delay) { - attributes.is_double_tap.Assign(1); - } +Result Gesture::Activate(u64 aruid, u32 basic_gesture_id) { + std::scoped_lock lock{mutex}; + return touch_resource->ActivateGesture(aruid, basic_gesture_id); } -void Gesture::UpdatePanEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, f32 time_difference) { - const auto& last_entry = GetLastGestureEntry(); +Result Gesture::Deactivate() { + std::scoped_lock lock{mutex}; + const auto result = touch_resource->DeactivateGesture(); - next_state.delta = gesture.mid_point - last_entry.pos; - next_state.vel_x = static_cast<f32>(next_state.delta.x) / time_difference; - next_state.vel_y = static_cast<f32>(next_state.delta.y) / time_difference; - last_pan_time_difference = time_difference; - - // Promote to pinch type - if (std::abs(gesture.average_distance - last_gesture_props.average_distance) > - pinch_threshold) { - type = GestureType::Pinch; - next_state.scale = gesture.average_distance / last_gesture_props.average_distance; + if (result.IsError()) { + return result; } - const f32 angle_between_two_lines = std::atan((gesture.angle - last_gesture_props.angle) / - (1 + (gesture.angle * last_gesture_props.angle))); - // Promote to rotate type - if (std::abs(angle_between_two_lines) > angle_threshold) { - type = GestureType::Rotate; - next_state.scale = 0; - next_state.rotation_angle = angle_between_two_lines * 180.0f / Common::PI; - } + // TODO: return StopThread(); + return ResultSuccess; } -void Gesture::EndPanEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, f32 time_difference) { - const auto& last_entry = GetLastGestureEntry(); - next_state.vel_x = - static_cast<f32>(last_entry.delta.x) / (last_pan_time_difference + time_difference); - next_state.vel_y = - static_cast<f32>(last_entry.delta.y) / (last_pan_time_difference + time_difference); - const f32 curr_vel = - std::sqrt((next_state.vel_x * next_state.vel_x) + (next_state.vel_y * next_state.vel_y)); - - // Set swipe event with parameters - if (curr_vel > swipe_threshold) { - SetSwipeEvent(gesture, last_gesture_props, type); - return; - } - - // End panning without swipe - type = GestureType::Complete; - next_state.vel_x = 0; - next_state.vel_y = 0; - force_update = true; -} - -void Gesture::SetSwipeEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type) { - const auto& last_entry = GetLastGestureEntry(); - - type = GestureType::Swipe; - gesture = last_gesture_props; - force_update = true; - next_state.delta = last_entry.delta; - - if (std::abs(next_state.delta.x) > std::abs(next_state.delta.y)) { - if (next_state.delta.x > 0) { - next_state.direction = GestureDirection::Right; - return; - } - next_state.direction = GestureDirection::Left; - return; - } - if (next_state.delta.y > 0) { - next_state.direction = GestureDirection::Down; - return; - } - next_state.direction = GestureDirection::Up; -} - -const GestureState& Gesture::GetLastGestureEntry() const { - return shared_memory->gesture_lifo.ReadCurrentEntry().state; -} - -GestureProperties Gesture::GetGestureProperties() { - GestureProperties gesture; - std::array<Core::HID::TouchFinger, MAX_POINTS> active_fingers; - const auto end_iter = std::copy_if(fingers.begin(), fingers.end(), active_fingers.begin(), - [](const auto& finger) { return finger.pressed; }); - gesture.active_points = - static_cast<std::size_t>(std::distance(active_fingers.begin(), end_iter)); - - for (size_t id = 0; id < gesture.active_points; ++id) { - const auto& [active_x, active_y] = active_fingers[id].position; - gesture.points[id] = { - .x = static_cast<s32>(active_x * Layout::ScreenUndocked::Width), - .y = static_cast<s32>(active_y * Layout::ScreenUndocked::Height), - }; - - // Hack: There is no touch in docked but games still allow it - if (Settings::IsDockedMode()) { - gesture.points[id] = { - .x = static_cast<s32>(active_x * Layout::ScreenDocked::Width), - .y = static_cast<s32>(active_y * Layout::ScreenDocked::Height), - }; - } - - gesture.mid_point.x += static_cast<s32>(gesture.points[id].x / gesture.active_points); - gesture.mid_point.y += static_cast<s32>(gesture.points[id].y / gesture.active_points); - } - - for (size_t id = 0; id < gesture.active_points; ++id) { - const f32 distance = std::sqrt(Square(gesture.mid_point.x - gesture.points[id].x) + - Square(gesture.mid_point.y - gesture.points[id].y)); - gesture.average_distance += distance / static_cast<f32>(gesture.active_points); - } - - gesture.angle = std::atan2(static_cast<f32>(gesture.mid_point.y - gesture.points[0].y), - static_cast<f32>(gesture.mid_point.x - gesture.points[0].x)); - - gesture.detection_count = last_gesture.detection_count; - - return gesture; +Result Gesture::IsActive(bool& out_is_active) const { + out_is_active = touch_resource->IsGestureActive(); + return ResultSuccess; } } // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/gesture.h b/src/hid_core/resources/touch_screen/gesture.h index 32e9a8690..d92912bb6 100644 --- a/src/hid_core/resources/touch_screen/gesture.h +++ b/src/hid_core/resources/touch_screen/gesture.h @@ -1,87 +1,32 @@ -// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later #pragma once -#include <array> +#include <mutex> #include "common/common_types.h" -#include "hid_core/resources/controller_base.h" -#include "hid_core/resources/touch_screen/touch_types.h" - -namespace Core::HID { -class EmulatedConsole; -} +#include "core/hle/result.h" namespace Service::HID { -struct GestureSharedMemoryFormat; +class TouchResource; -class Gesture final : public ControllerBase { +/// Handles gesture request from HID interfaces +class Gesture { public: - explicit Gesture(Core::HID::HIDCore& hid_core_); - ~Gesture() override; + Gesture(std::shared_ptr<TouchResource> resource); + ~Gesture(); - // Called when the controller is initialized - void OnInit() override; + Result Activate(); + Result Activate(u64 aruid, u32 basic_gesture_id); - // When the controller is released - void OnRelease() override; + Result Deactivate(); - // When the controller is requesting an update for the shared memory - void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; + Result IsActive(bool& out_is_active) const; private: - // Reads input from all available input engines - void ReadTouchInput(); - - // Returns true if gesture state needs to be updated - bool ShouldUpdateGesture(const GestureProperties& gesture, f32 time_difference); - - // Updates the shared memory to the next state - void UpdateGestureSharedMemory(GestureProperties& gesture, f32 time_difference); - - // Initializes new gesture - void NewGesture(GestureProperties& gesture, GestureType& type, GestureAttribute& attributes); - - // Updates existing gesture state - void UpdateExistingGesture(GestureProperties& gesture, GestureType& type, f32 time_difference); - - // Terminates exiting gesture - void EndGesture(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, GestureAttribute& attributes, f32 time_difference); - - // Set current event to a tap event - void SetTapEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, GestureAttribute& attributes); - - // Calculates and set the extra parameters related to a pan event - void UpdatePanEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, f32 time_difference); - - // Terminates the pan event - void EndPanEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type, f32 time_difference); - - // Set current event to a swipe event - void SetSwipeEvent(GestureProperties& gesture, GestureProperties& last_gesture_props, - GestureType& type); - - // Retrieves the last gesture entry, as indicated by shared memory indices. - [[nodiscard]] const GestureState& GetLastGestureEntry() const; - - // Returns the average distance, angle and middle point of the active fingers - GestureProperties GetGestureProperties(); - - GestureState next_state{}; - GestureSharedMemoryFormat* shared_memory; - Core::HID::EmulatedConsole* console = nullptr; - - std::array<Core::HID::TouchFinger, MAX_POINTS> fingers{}; - GestureProperties last_gesture{}; - s64 last_update_timestamp{}; - s64 last_tap_timestamp{}; - f32 last_pan_time_difference{}; - bool force_update{false}; - bool enable_press_and_tap{false}; + mutable std::mutex mutex; + std::shared_ptr<TouchResource> touch_resource; }; + } // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/gesture_handler.cpp b/src/hid_core/resources/touch_screen/gesture_handler.cpp new file mode 100644 index 000000000..4fcaf6ecf --- /dev/null +++ b/src/hid_core/resources/touch_screen/gesture_handler.cpp @@ -0,0 +1,260 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "common/math_util.h" +#include "hid_core/resources/touch_screen/gesture_handler.h" + +namespace Service::HID { + +constexpr f32 Square(s32 num) { + return static_cast<f32>(num * num); +} + +GestureHandler::GestureHandler() {} + +GestureHandler::~GestureHandler() {} + +void GestureHandler::SetTouchState(std::span<TouchState> touch_state, u32 count, s64 timestamp) { + gesture = {}; + gesture.active_points = std::min(MaxPoints, static_cast<std::size_t>(count)); + + for (size_t id = 0; id < gesture.active_points; ++id) { + const auto& [active_x, active_y] = touch_state[id].position; + gesture.points[id] = { + .x = static_cast<s32>(active_x), + .y = static_cast<s32>(active_y), + }; + + gesture.mid_point.x += static_cast<s32>(gesture.points[id].x / gesture.active_points); + gesture.mid_point.y += static_cast<s32>(gesture.points[id].y / gesture.active_points); + } + + for (size_t id = 0; id < gesture.active_points; ++id) { + const f32 distance = std::sqrt(Square(gesture.mid_point.x - gesture.points[id].x) + + Square(gesture.mid_point.y - gesture.points[id].y)); + gesture.average_distance += distance / static_cast<f32>(gesture.active_points); + } + + gesture.angle = std::atan2(static_cast<f32>(gesture.mid_point.y - gesture.points[0].y), + static_cast<f32>(gesture.mid_point.x - gesture.points[0].x)); + + gesture.detection_count = last_gesture.detection_count; + + if (last_update_timestamp > timestamp) { + timestamp = last_tap_timestamp; + } + + time_difference = static_cast<f32>(timestamp - last_update_timestamp) / (1000 * 1000 * 1000); +} + +bool GestureHandler::NeedsUpdate() { + if (force_update) { + force_update = false; + return true; + } + + // Update if coordinates change + for (size_t id = 0; id < MaxPoints; id++) { + if (gesture.points[id] != last_gesture.points[id]) { + return true; + } + } + + // Update on press and hold event after 0.5 seconds + if (last_gesture_state.type == GestureType::Touch && last_gesture_state.point_count == 1 && + time_difference > PressDelay) { + return enable_press_and_tap; + } + + return false; +} + +void GestureHandler::UpdateGestureState(GestureState& next_state, s64 timestamp) { + last_update_timestamp = timestamp; + + GestureType type = GestureType::Idle; + GestureAttribute attributes{}; + + // Reset next state to default + next_state.sampling_number = last_gesture_state.sampling_number + 1; + next_state.delta = {}; + next_state.vel_x = 0; + next_state.vel_y = 0; + next_state.direction = GestureDirection::None; + next_state.rotation_angle = 0; + next_state.scale = 0; + + if (gesture.active_points > 0) { + if (last_gesture.active_points == 0) { + NewGesture(type, attributes); + } else { + UpdateExistingGesture(next_state, type); + } + } else { + EndGesture(next_state, type, attributes); + } + + // Apply attributes + next_state.detection_count = gesture.detection_count; + next_state.type = type; + next_state.attributes = attributes; + next_state.pos = gesture.mid_point; + next_state.point_count = static_cast<s32>(gesture.active_points); + next_state.points = gesture.points; + last_gesture = gesture; + last_gesture_state = next_state; +} + +void GestureHandler::NewGesture(GestureType& type, GestureAttribute& attributes) { + gesture.detection_count++; + type = GestureType::Touch; + + // New touch after cancel is not considered new + if (last_gesture_state.type != GestureType::Cancel) { + attributes.is_new_touch.Assign(1); + enable_press_and_tap = true; + } +} + +void GestureHandler::UpdateExistingGesture(GestureState& next_state, GestureType& type) { + // Promote to pan type if touch moved + for (size_t id = 0; id < MaxPoints; id++) { + if (gesture.points[id] != last_gesture.points[id]) { + type = GestureType::Pan; + break; + } + } + + // Number of fingers changed cancel the last event and clear data + if (gesture.active_points != last_gesture.active_points) { + type = GestureType::Cancel; + enable_press_and_tap = false; + gesture.active_points = 0; + gesture.mid_point = {}; + gesture.points.fill({}); + return; + } + + // Calculate extra parameters of panning + if (type == GestureType::Pan) { + UpdatePanEvent(next_state, type); + return; + } + + // Promote to press type + if (last_gesture_state.type == GestureType::Touch) { + type = GestureType::Press; + } +} + +void GestureHandler::EndGesture(GestureState& next_state, GestureType& type, + GestureAttribute& attributes) { + if (last_gesture.active_points != 0) { + switch (last_gesture_state.type) { + case GestureType::Touch: + if (enable_press_and_tap) { + SetTapEvent(type, attributes); + return; + } + type = GestureType::Cancel; + force_update = true; + break; + case GestureType::Press: + case GestureType::Tap: + case GestureType::Swipe: + case GestureType::Pinch: + case GestureType::Rotate: + type = GestureType::Complete; + force_update = true; + break; + case GestureType::Pan: + EndPanEvent(next_state, type); + break; + default: + break; + } + return; + } + if (last_gesture_state.type == GestureType::Complete || + last_gesture_state.type == GestureType::Cancel) { + gesture.detection_count++; + } +} + +void GestureHandler::SetTapEvent(GestureType& type, GestureAttribute& attributes) { + type = GestureType::Tap; + gesture = last_gesture; + force_update = true; + f32 tap_time_difference = + static_cast<f32>(last_update_timestamp - last_tap_timestamp) / (1000 * 1000 * 1000); + last_tap_timestamp = last_update_timestamp; + if (tap_time_difference < DoubleTapDelay) { + attributes.is_double_tap.Assign(1); + } +} + +void GestureHandler::UpdatePanEvent(GestureState& next_state, GestureType& type) { + next_state.delta = gesture.mid_point - last_gesture_state.pos; + next_state.vel_x = static_cast<f32>(next_state.delta.x) / time_difference; + next_state.vel_y = static_cast<f32>(next_state.delta.y) / time_difference; + last_pan_time_difference = time_difference; + + // Promote to pinch type + if (std::abs(gesture.average_distance - last_gesture.average_distance) > PinchThreshold) { + type = GestureType::Pinch; + next_state.scale = gesture.average_distance / last_gesture.average_distance; + } + + const f32 angle_between_two_lines = std::atan((gesture.angle - last_gesture.angle) / + (1 + (gesture.angle * last_gesture.angle))); + // Promote to rotate type + if (std::abs(angle_between_two_lines) > AngleThreshold) { + type = GestureType::Rotate; + next_state.scale = 0; + next_state.rotation_angle = angle_between_two_lines * 180.0f / Common::PI; + } +} + +void GestureHandler::EndPanEvent(GestureState& next_state, GestureType& type) { + next_state.vel_x = + static_cast<f32>(last_gesture_state.delta.x) / (last_pan_time_difference + time_difference); + next_state.vel_y = + static_cast<f32>(last_gesture_state.delta.y) / (last_pan_time_difference + time_difference); + const f32 curr_vel = + std::sqrt((next_state.vel_x * next_state.vel_x) + (next_state.vel_y * next_state.vel_y)); + + // Set swipe event with parameters + if (curr_vel > SwipeThreshold) { + SetSwipeEvent(next_state, type); + return; + } + + // End panning without swipe + type = GestureType::Complete; + next_state.vel_x = 0; + next_state.vel_y = 0; + force_update = true; +} + +void GestureHandler::SetSwipeEvent(GestureState& next_state, GestureType& type) { + type = GestureType::Swipe; + gesture = last_gesture; + force_update = true; + next_state.delta = last_gesture_state.delta; + + if (std::abs(next_state.delta.x) > std::abs(next_state.delta.y)) { + if (next_state.delta.x > 0) { + next_state.direction = GestureDirection::Right; + return; + } + next_state.direction = GestureDirection::Left; + return; + } + if (next_state.delta.y > 0) { + next_state.direction = GestureDirection::Down; + return; + } + next_state.direction = GestureDirection::Up; +} + +} // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/gesture_handler.h b/src/hid_core/resources/touch_screen/gesture_handler.h new file mode 100644 index 000000000..fda2040c9 --- /dev/null +++ b/src/hid_core/resources/touch_screen/gesture_handler.h @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include <span> + +#include "hid_core/resources/touch_screen/touch_types.h" + +namespace Service::HID { + +class GestureHandler { +public: + GestureHandler(); + ~GestureHandler(); + + void SetTouchState(std::span<TouchState> touch_state, u32 count, s64 timestamp); + + bool NeedsUpdate(); + void UpdateGestureState(GestureState& next_state, s64 timestamp); + +private: + // Initializes new gesture + void NewGesture(GestureType& type, GestureAttribute& attributes); + + // Updates existing gesture state + void UpdateExistingGesture(GestureState& next_state, GestureType& type); + + // Terminates exiting gesture + void EndGesture(GestureState& next_state, GestureType& type, GestureAttribute& attributes); + + // Set current event to a tap event + void SetTapEvent(GestureType& type, GestureAttribute& attributes); + + // Calculates and set the extra parameters related to a pan event + void UpdatePanEvent(GestureState& next_state, GestureType& type); + + // Terminates the pan event + void EndPanEvent(GestureState& next_state, GestureType& type); + + // Set current event to a swipe event + void SetSwipeEvent(GestureState& next_state, GestureType& type); + + GestureProperties gesture{}; + GestureProperties last_gesture{}; + GestureState last_gesture_state{}; + s64 last_update_timestamp{}; + s64 last_tap_timestamp{}; + f32 last_pan_time_difference{}; + f32 time_difference{}; + bool force_update{true}; + bool enable_press_and_tap{false}; +}; + +} // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/gesture_types.h b/src/hid_core/resources/touch_screen/gesture_types.h deleted file mode 100644 index b4f034cd3..000000000 --- a/src/hid_core/resources/touch_screen/gesture_types.h +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project -// SPDX-License-Identifier: GPL-3.0-or-later - -#pragma once - -#include <array> -#include "common/bit_field.h" -#include "common/common_types.h" -#include "common/point.h" - -namespace Service::HID { -static constexpr size_t MAX_FINGERS = 16; -static constexpr size_t MAX_POINTS = 4; - -// This is nn::hid::GestureType -enum class GestureType : u32 { - Idle, // Nothing touching the screen - Complete, // Set at the end of a touch event - Cancel, // Set when the number of fingers change - Touch, // A finger just touched the screen - Press, // Set if last type is touch and the finger hasn't moved - Tap, // Fast press then release - Pan, // All points moving together across the screen - Swipe, // Fast press movement and release of a single point - Pinch, // All points moving away/closer to the midpoint - Rotate, // All points rotating from the midpoint -}; - -// This is nn::hid::GestureDirection -enum class GestureDirection : u32 { - None, - Left, - Up, - Right, - Down, -}; - -// This is nn::hid::GestureAttribute -struct GestureAttribute { - union { - u32 raw{}; - - BitField<4, 1, u32> is_new_touch; - BitField<8, 1, u32> is_double_tap; - }; -}; -static_assert(sizeof(GestureAttribute) == 4, "GestureAttribute is an invalid size"); - -// This is nn::hid::GestureState -struct GestureState { - s64 sampling_number{}; - s64 detection_count{}; - GestureType type{GestureType::Idle}; - GestureDirection direction{GestureDirection::None}; - Common::Point<s32> pos{}; - Common::Point<s32> delta{}; - f32 vel_x{}; - f32 vel_y{}; - GestureAttribute attributes{}; - f32 scale{}; - f32 rotation_angle{}; - s32 point_count{}; - std::array<Common::Point<s32>, 4> points{}; -}; -static_assert(sizeof(GestureState) == 0x60, "GestureState is an invalid size"); - -struct GestureProperties { - std::array<Common::Point<s32>, MAX_POINTS> points{}; - std::size_t active_points{}; - Common::Point<s32> mid_point{}; - s64 detection_count{}; - u64 delta_time{}; - f32 average_distance{}; - f32 angle{}; -}; - -} // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/touch_screen.cpp b/src/hid_core/resources/touch_screen/touch_screen.cpp index 48d956c51..35efb1786 100644 --- a/src/hid_core/resources/touch_screen/touch_screen.cpp +++ b/src/hid_core/resources/touch_screen/touch_screen.cpp @@ -1,132 +1,119 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include <algorithm> -#include "common/common_types.h" -#include "common/settings.h" -#include "core/core_timing.h" -#include "core/frontend/emu_window.h" -#include "hid_core/frontend/emulated_console.h" -#include "hid_core/hid_core.h" -#include "hid_core/resources/applet_resource.h" -#include "hid_core/resources/shared_memory_format.h" +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "hid_core/hid_types.h" #include "hid_core/resources/touch_screen/touch_screen.h" +#include "hid_core/resources/touch_screen/touch_screen_resource.h" namespace Service::HID { -TouchScreen::TouchScreen(Core::HID::HIDCore& hid_core_) - : ControllerBase{hid_core_}, touchscreen_width(Layout::ScreenUndocked::Width), - touchscreen_height(Layout::ScreenUndocked::Height) { - console = hid_core.GetEmulatedConsole(); -} +TouchScreen::TouchScreen(std::shared_ptr<TouchResource> resource) : touch_resource{resource} {} TouchScreen::~TouchScreen() = default; -void TouchScreen::OnInit() {} +Result TouchScreen::Activate() { + std::scoped_lock lock{mutex}; -void TouchScreen::OnRelease() {} - -void TouchScreen::OnUpdate(const Core::Timing::CoreTiming& core_timing) { - const u64 aruid = applet_resource->GetActiveAruid(); - auto* data = applet_resource->GetAruidData(aruid); + // TODO: Result result = CreateThread(); + Result result = ResultSuccess; + if (result.IsError()) { + return result; + } - if (data == nullptr || !data->flag.is_assigned) { - return; + result = touch_resource->ActivateTouch(); + if (result.IsError()) { + // TODO: StopThread(); } - TouchScreenSharedMemoryFormat& shared_memory = data->shared_memory_format->touch_screen; - shared_memory.touch_screen_lifo.timestamp = core_timing.GetGlobalTimeNs().count(); + return result; +} - if (!IsControllerActivated()) { - shared_memory.touch_screen_lifo.buffer_count = 0; - shared_memory.touch_screen_lifo.buffer_tail = 0; - return; - } +Result TouchScreen::Activate(u64 aruid) { + std::scoped_lock lock{mutex}; + return touch_resource->ActivateTouch(aruid); +} - const auto touch_status = console->GetTouch(); - for (std::size_t id = 0; id < MAX_FINGERS; id++) { - const auto& current_touch = touch_status[id]; - auto& finger = fingers[id]; - finger.id = current_touch.id; - - if (finger.attribute.start_touch) { - finger.attribute.raw = 0; - continue; - } - - if (finger.attribute.end_touch) { - finger.attribute.raw = 0; - finger.pressed = false; - continue; - } - - if (!finger.pressed && current_touch.pressed) { - // Ignore all touch fingers if disabled - if (!Settings::values.touchscreen.enabled) { - continue; - } - - finger.attribute.start_touch.Assign(1); - finger.pressed = true; - finger.position = current_touch.position; - continue; - } - - if (finger.pressed && !current_touch.pressed) { - finger.attribute.raw = 0; - finger.attribute.end_touch.Assign(1); - continue; - } - - // Only update position if touch is not on a special frame - finger.position = current_touch.position; - } +Result TouchScreen::Deactivate() { + std::scoped_lock lock{mutex}; + const auto result = touch_resource->DeactivateTouch(); - std::array<Core::HID::TouchFinger, MAX_FINGERS> active_fingers; - const auto end_iter = std::copy_if(fingers.begin(), fingers.end(), active_fingers.begin(), - [](const auto& finger) { return finger.pressed; }); - const auto active_fingers_count = - static_cast<std::size_t>(std::distance(active_fingers.begin(), end_iter)); - - const u64 timestamp = static_cast<u64>(core_timing.GetGlobalTimeNs().count()); - const auto& last_entry = shared_memory.touch_screen_lifo.ReadCurrentEntry().state; - - next_state.sampling_number = last_entry.sampling_number + 1; - next_state.entry_count = static_cast<s32>(active_fingers_count); - - for (std::size_t id = 0; id < MAX_FINGERS; ++id) { - auto& touch_entry = next_state.states[id]; - if (id < active_fingers_count) { - const auto& [active_x, active_y] = active_fingers[id].position; - touch_entry.position = { - .x = static_cast<u16>(active_x * static_cast<float>(touchscreen_width)), - .y = static_cast<u16>(active_y * static_cast<float>(touchscreen_height)), - }; - touch_entry.diameter_x = Settings::values.touchscreen.diameter_x; - touch_entry.diameter_y = Settings::values.touchscreen.diameter_y; - touch_entry.rotation_angle = Settings::values.touchscreen.rotation_angle; - touch_entry.delta_time = timestamp - active_fingers[id].last_touch; - fingers[active_fingers[id].id].last_touch = timestamp; - touch_entry.finger = active_fingers[id].id; - touch_entry.attribute.raw = active_fingers[id].attribute.raw; - } else { - // Clear touch entry - touch_entry.attribute.raw = 0; - touch_entry.position = {}; - touch_entry.diameter_x = 0; - touch_entry.diameter_y = 0; - touch_entry.rotation_angle = 0; - touch_entry.delta_time = 0; - touch_entry.finger = 0; - } + if (result.IsError()) { + return result; } - shared_memory.touch_screen_lifo.WriteNextEntry(next_state); + // TODO: return StopThread(); + return ResultSuccess; +} + +Result TouchScreen::IsActive(bool& out_is_active) const { + out_is_active = touch_resource->IsTouchActive(); + return ResultSuccess; +} + +Result TouchScreen::SetTouchScreenAutoPilotState(const AutoPilotState& auto_pilot_state) { + std::scoped_lock lock{mutex}; + return touch_resource->SetTouchScreenAutoPilotState(auto_pilot_state); +} + +Result TouchScreen::UnsetTouchScreenAutoPilotState() { + std::scoped_lock lock{mutex}; + return touch_resource->UnsetTouchScreenAutoPilotState(); +} + +Result TouchScreen::RequestNextTouchInput() { + std::scoped_lock lock{mutex}; + return touch_resource->RequestNextTouchInput(); +} + +Result TouchScreen::RequestNextDummyInput() { + std::scoped_lock lock{mutex}; + return touch_resource->RequestNextDummyInput(); +} + +Result TouchScreen::ProcessTouchScreenAutoTune() { + std::scoped_lock lock{mutex}; + return touch_resource->ProcessTouchScreenAutoTune(); +} + +Result TouchScreen::SetTouchScreenMagnification(f32 point1_x, f32 point1_y, f32 point2_x, + f32 point2_y) { + std::scoped_lock lock{mutex}; + touch_resource->SetTouchScreenMagnification(point1_x, point1_y, point2_x, point2_y); + return ResultSuccess; +} + +Result TouchScreen::SetTouchScreenResolution(u32 width, u32 height, u64 aruid) { + std::scoped_lock lock{mutex}; + return touch_resource->SetTouchScreenResolution(width, height, aruid); +} + +Result TouchScreen::SetTouchScreenConfiguration( + const Core::HID::TouchScreenConfigurationForNx& mode, u64 aruid) { + std::scoped_lock lock{mutex}; + return touch_resource->SetTouchScreenConfiguration(mode, aruid); +} + +Result TouchScreen::GetTouchScreenConfiguration(Core::HID::TouchScreenConfigurationForNx& out_mode, + u64 aruid) const { + std::scoped_lock lock{mutex}; + return touch_resource->GetTouchScreenConfiguration(out_mode, aruid); +} + +Result TouchScreen::SetTouchScreenDefaultConfiguration( + const Core::HID::TouchScreenConfigurationForNx& mode) { + std::scoped_lock lock{mutex}; + return touch_resource->SetTouchScreenDefaultConfiguration(mode); +} + +Result TouchScreen::GetTouchScreenDefaultConfiguration( + Core::HID::TouchScreenConfigurationForNx& out_mode) const { + std::scoped_lock lock{mutex}; + return touch_resource->GetTouchScreenDefaultConfiguration(out_mode); } -void TouchScreen::SetTouchscreenDimensions(u32 width, u32 height) { - touchscreen_width = width; - touchscreen_height = height; +void TouchScreen::OnTouchUpdate(u64 timestamp) { + std::scoped_lock lock{mutex}; + touch_resource->OnTouchUpdate(timestamp); } } // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/touch_screen.h b/src/hid_core/resources/touch_screen/touch_screen.h index 4b3824742..2fcb6247f 100644 --- a/src/hid_core/resources/touch_screen/touch_screen.h +++ b/src/hid_core/resources/touch_screen/touch_screen.h @@ -1,43 +1,64 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later #pragma once -#include <array> +#include <mutex> -#include "hid_core/hid_types.h" -#include "hid_core/resources/controller_base.h" -#include "hid_core/resources/touch_screen/touch_types.h" +#include "common/common_types.h" +#include "core/hle/result.h" namespace Core::HID { -class EmulatedConsole; -} // namespace Core::HID +struct TouchScreenConfigurationForNx; +} + +namespace Core::Timing { +struct EventType; +} namespace Service::HID { -struct TouchScreenSharedMemoryFormat; +class TouchResource; +struct AutoPilotState; -class TouchScreen final : public ControllerBase { +/// Handles touch request from HID interfaces +class TouchScreen { public: - explicit TouchScreen(Core::HID::HIDCore& hid_core_); - ~TouchScreen() override; + TouchScreen(std::shared_ptr<TouchResource> resource); + ~TouchScreen(); - // Called when the controller is initialized - void OnInit() override; + Result Activate(); + Result Activate(u64 aruid); - // When the controller is released - void OnRelease() override; + Result Deactivate(); - // When the controller is requesting an update for the shared memory - void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; + Result IsActive(bool& out_is_active) const; - void SetTouchscreenDimensions(u32 width, u32 height); + Result SetTouchScreenAutoPilotState(const AutoPilotState& auto_pilot_state); + Result UnsetTouchScreenAutoPilotState(); -private: - TouchScreenState next_state{}; - Core::HID::EmulatedConsole* console = nullptr; + Result RequestNextTouchInput(); + Result RequestNextDummyInput(); + + Result ProcessTouchScreenAutoTune(); + + Result SetTouchScreenMagnification(f32 point1_x, f32 point1_y, f32 point2_x, f32 point2_y); + Result SetTouchScreenResolution(u32 width, u32 height, u64 aruid); + + Result SetTouchScreenConfiguration(const Core::HID::TouchScreenConfigurationForNx& mode, + u64 aruid); + Result GetTouchScreenConfiguration(Core::HID::TouchScreenConfigurationForNx& out_mode, + u64 aruid) const; - std::array<Core::HID::TouchFinger, MAX_FINGERS> fingers{}; - u32 touchscreen_width; - u32 touchscreen_height; + Result SetTouchScreenDefaultConfiguration(const Core::HID::TouchScreenConfigurationForNx& mode); + Result GetTouchScreenDefaultConfiguration( + Core::HID::TouchScreenConfigurationForNx& out_mode) const; + + void OnTouchUpdate(u64 timestamp); + +private: + mutable std::mutex mutex; + std::shared_ptr<TouchResource> touch_resource; + std::shared_ptr<Core::Timing::EventType> touch_update_event; }; + } // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/touch_screen_driver.cpp b/src/hid_core/resources/touch_screen/touch_screen_driver.cpp new file mode 100644 index 000000000..6a64c75b3 --- /dev/null +++ b/src/hid_core/resources/touch_screen/touch_screen_driver.cpp @@ -0,0 +1,114 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#include <algorithm> +#include "common/settings.h" +#include "core/frontend/emu_window.h" +#include "hid_core/hid_core.h" +#include "hid_core/resources/touch_screen/touch_screen_driver.h" + +namespace Service::HID { + +TouchDriver::TouchDriver(Core::HID::HIDCore& hid_core) { + console = hid_core.GetEmulatedConsole(); +} + +TouchDriver::~TouchDriver() = default; + +Result TouchDriver::StartTouchSensor() { + is_running = true; + return ResultSuccess; +} + +Result TouchDriver::StopTouchSensor() { + is_running = false; + return ResultSuccess; +} + +bool TouchDriver::IsRunning() const { + return is_running; +} + +void TouchDriver::ProcessTouchScreenAutoTune() const { + // TODO +} + +Result TouchDriver::WaitForDummyInput() { + touch_status = {}; + return ResultSuccess; +} + +Result TouchDriver::WaitForInput() { + touch_status = {}; + const auto touch_input = console->GetTouch(); + for (std::size_t id = 0; id < touch_status.states.size(); id++) { + const auto& current_touch = touch_input[id]; + auto& finger = fingers[id]; + finger.id = current_touch.id; + + if (finger.attribute.start_touch) { + finger.attribute.raw = 0; + continue; + } + + if (finger.attribute.end_touch) { + finger.attribute.raw = 0; + finger.pressed = false; + continue; + } + + if (!finger.pressed && current_touch.pressed) { + finger.attribute.start_touch.Assign(1); + finger.pressed = true; + finger.position = current_touch.position; + continue; + } + + if (finger.pressed && !current_touch.pressed) { + finger.attribute.raw = 0; + finger.attribute.end_touch.Assign(1); + continue; + } + + // Only update position if touch is not on a special frame + finger.position = current_touch.position; + } + + std::array<Core::HID::TouchFinger, MaxFingers> active_fingers; + const auto end_iter = std::copy_if(fingers.begin(), fingers.end(), active_fingers.begin(), + [](const auto& finger) { return finger.pressed; }); + const auto active_fingers_count = + static_cast<std::size_t>(std::distance(active_fingers.begin(), end_iter)); + + touch_status.entry_count = static_cast<s32>(active_fingers_count); + for (std::size_t id = 0; id < MaxFingers; ++id) { + auto& touch_entry = touch_status.states[id]; + if (id < active_fingers_count) { + const auto& [active_x, active_y] = active_fingers[id].position; + touch_entry.position = { + .x = static_cast<u16>(active_x * TouchSensorWidth), + .y = static_cast<u16>(active_y * TouchSensorHeight), + }; + touch_entry.diameter_x = Settings::values.touchscreen.diameter_x; + touch_entry.diameter_y = Settings::values.touchscreen.diameter_y; + touch_entry.rotation_angle = Settings::values.touchscreen.rotation_angle; + touch_entry.finger = active_fingers[id].id; + touch_entry.attribute.raw = active_fingers[id].attribute.raw; + } + } + return ResultSuccess; +} + +void TouchDriver::GetNextTouchState(TouchScreenState& out_state) const { + out_state = touch_status; +} + +void TouchDriver::SetTouchMode(Core::HID::TouchScreenModeForNx mode) { + touch_mode = mode; +} + +Core::HID::TouchScreenModeForNx TouchDriver::GetTouchMode() const { + return touch_mode; +} + +} // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/touch_screen_driver.h b/src/hid_core/resources/touch_screen/touch_screen_driver.h new file mode 100644 index 000000000..ca7e4970e --- /dev/null +++ b/src/hid_core/resources/touch_screen/touch_screen_driver.h @@ -0,0 +1,47 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include "common/common_types.h" +#include "core/hle/result.h" +#include "hid_core/frontend/emulated_console.h" +#include "hid_core/hid_types.h" +#include "hid_core/resources/touch_screen/touch_types.h" + +namespace Core::HID { +class HIDCore; +} // namespace Core::HID + +namespace Service::HID { + +/// This handles all request to Ftm3bd56(TouchPanel) hardware +class TouchDriver { +public: + explicit TouchDriver(Core::HID::HIDCore& hid_core); + ~TouchDriver(); + + Result StartTouchSensor(); + Result StopTouchSensor(); + bool IsRunning() const; + + void ProcessTouchScreenAutoTune() const; + + Result WaitForDummyInput(); + Result WaitForInput(); + + void GetNextTouchState(TouchScreenState& out_state) const; + + void SetTouchMode(Core::HID::TouchScreenModeForNx mode); + Core::HID::TouchScreenModeForNx GetTouchMode() const; + +private: + bool is_running{}; + TouchScreenState touch_status{}; + Core::HID::TouchFingerState fingers{}; + Core::HID::TouchScreenModeForNx touch_mode{}; + + Core::HID::EmulatedConsole* console = nullptr; +}; + +} // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/touch_screen_resource.cpp b/src/hid_core/resources/touch_screen/touch_screen_resource.cpp new file mode 100644 index 000000000..56e8e8e51 --- /dev/null +++ b/src/hid_core/resources/touch_screen/touch_screen_resource.cpp @@ -0,0 +1,579 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "common/logging/log.h" +#include "core/core_timing.h" +#include "core/hle/kernel/k_event.h" +#include "core/hle/kernel/k_shared_memory.h" +#include "core/hle/service/set/system_settings_server.h" +#include "core/hle/service/sm/sm.h" +#include "hid_core/hid_result.h" +#include "hid_core/resources/applet_resource.h" +#include "hid_core/resources/shared_memory_format.h" +#include "hid_core/resources/touch_screen/touch_screen_driver.h" +#include "hid_core/resources/touch_screen/touch_screen_resource.h" + +namespace Service::HID { +constexpr auto GestureUpdatePeriod = std::chrono::nanoseconds{4 * 1000 * 1000}; // (4ms, 1000Hz) + +TouchResource::TouchResource(Core::System& system_) : system{system_} { + m_set_sys = system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys"); +} + +TouchResource::~TouchResource() { + Finalize(); +}; + +Result TouchResource::ActivateTouch() { + if (global_ref_counter == std::numeric_limits<s32>::max() - 1 || + touch_ref_counter == std::numeric_limits<s32>::max() - 1) { + return ResultTouchOverflow; + } + + if (global_ref_counter == 0) { + std::scoped_lock lock{*shared_mutex}; + + const auto result = touch_driver->StartTouchSensor(); + if (result.IsError()) { + return result; + } + + is_initalized = true; + system.CoreTiming().ScheduleLoopingEvent(GestureUpdatePeriod, GestureUpdatePeriod, + timer_event); + current_touch_state = {}; + ReadTouchInput(); + gesture_handler.SetTouchState(current_touch_state.states, current_touch_state.entry_count, + 0); + } + + Set::TouchScreenMode touch_mode{Set::TouchScreenMode::Standard}; + m_set_sys->GetTouchScreenMode(touch_mode); + default_touch_screen_mode = static_cast<Core::HID::TouchScreenModeForNx>(touch_mode); + + global_ref_counter++; + touch_ref_counter++; + return ResultSuccess; +} + +Result TouchResource::ActivateTouch(u64 aruid) { + std::scoped_lock lock{*shared_mutex}; + + for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) { + auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index); + TouchAruidData& touch_data = aruid_data[aruid_index]; + + if (!applet_data->flag.is_assigned) { + touch_data = {}; + continue; + } + + const u64 aruid_id = applet_data->aruid; + if (touch_data.aruid != aruid_id) { + touch_data = {}; + touch_data.aruid = aruid_id; + } + + if (aruid != aruid_id) { + continue; + } + + auto& touch_shared = applet_data->shared_memory_format->touch_screen; + + if (touch_shared.touch_screen_lifo.buffer_count == 0) { + StorePreviousTouchState(previous_touch_state, touch_data.finger_map, + current_touch_state, + applet_data->flag.enable_touchscreen.Value() != 0); + touch_shared.touch_screen_lifo.WriteNextEntry(previous_touch_state); + } + } + return ResultSuccess; +} + +Result TouchResource::ActivateGesture() { + if (global_ref_counter == std::numeric_limits<s32>::max() - 1 || + gesture_ref_counter == std::numeric_limits<s32>::max() - 1) { + return ResultGestureOverflow; + } + + // Initialize first instance + if (global_ref_counter == 0) { + const auto result = touch_driver->StartTouchSensor(); + if (result.IsError()) { + return result; + } + + is_initalized = true; + system.CoreTiming().ScheduleLoopingEvent(GestureUpdatePeriod, GestureUpdatePeriod, + timer_event); + current_touch_state = {}; + ReadTouchInput(); + gesture_handler.SetTouchState(current_touch_state.states, current_touch_state.entry_count, + 0); + } + + global_ref_counter++; + gesture_ref_counter++; + return ResultSuccess; +} + +Result TouchResource::ActivateGesture(u64 aruid, u32 basic_gesture_id) { + std::scoped_lock lock{*shared_mutex}; + + for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) { + auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index); + TouchAruidData& touch_data = aruid_data[aruid_index]; + + if (!applet_data->flag.is_assigned) { + touch_data = {}; + continue; + } + + const u64 aruid_id = applet_data->aruid; + if (touch_data.aruid != aruid_id) { + touch_data = {}; + touch_data.aruid = aruid_id; + } + + if (aruid != aruid_id) { + continue; + } + + auto& gesture_shared = applet_data->shared_memory_format->gesture; + if (touch_data.basic_gesture_id != basic_gesture_id) { + gesture_shared.gesture_lifo.buffer_count = 0; + } + + if (gesture_shared.gesture_lifo.buffer_count == 0) { + touch_data.basic_gesture_id = basic_gesture_id; + + gesture_shared.gesture_lifo.WriteNextEntry(gesture_state); + } + } + + return ResultSuccess; +} + +Result TouchResource::DeactivateTouch() { + if (touch_ref_counter == 0 || global_ref_counter == 0) { + return ResultTouchNotInitialized; + } + + global_ref_counter--; + touch_ref_counter--; + + if (touch_ref_counter + global_ref_counter != 0) { + return ResultSuccess; + } + + return Finalize(); +} + +Result TouchResource::DeactivateGesture() { + if (gesture_ref_counter == 0 || global_ref_counter == 0) { + return ResultGestureNotInitialized; + } + + global_ref_counter--; + gesture_ref_counter--; + + if (touch_ref_counter + global_ref_counter != 0) { + return ResultSuccess; + } + + return Finalize(); +} + +bool TouchResource::IsTouchActive() const { + return touch_ref_counter != 0; +} + +bool TouchResource::IsGestureActive() const { + return gesture_ref_counter != 0; +} + +void TouchResource::SetTouchDriver(std::shared_ptr<TouchDriver> driver) { + touch_driver = driver; +} + +void TouchResource::SetAppletResource(std::shared_ptr<AppletResource> shared, + std::recursive_mutex* mutex) { + applet_resource = shared; + shared_mutex = mutex; +} + +void TouchResource::SetInputEvent(Kernel::KEvent* event, std::mutex* mutex) { + input_event = event; + input_mutex = mutex; +} + +void TouchResource::SetHandheldConfig(std::shared_ptr<HandheldConfig> config) { + handheld_config = config; +} + +void TouchResource::SetTimerEvent(std::shared_ptr<Core::Timing::EventType> event) { + timer_event = event; +} + +Result TouchResource::SetTouchScreenAutoPilotState(const AutoPilotState& auto_pilot_state) { + if (global_ref_counter == 0) { + return ResultTouchNotInitialized; + } + + if (!is_auto_pilot_initialized) { + is_auto_pilot_initialized = true; + auto_pilot = {}; + } + + TouchScreenState state = { + .entry_count = static_cast<s32>(auto_pilot_state.count), + .states = auto_pilot_state.state, + }; + + SanitizeInput(state); + + auto_pilot.count = state.entry_count; + auto_pilot.state = state.states; + return ResultSuccess; +} + +Result TouchResource::UnsetTouchScreenAutoPilotState() { + if (global_ref_counter == 0) { + return ResultTouchNotInitialized; + } + + is_auto_pilot_initialized = false; + auto_pilot = {}; + return ResultSuccess; +} + +Result TouchResource::RequestNextTouchInput() { + if (global_ref_counter == 0) { + return ResultTouchNotInitialized; + } + + if (handheld_config->is_handheld_hid_enabled) { + const Result result = touch_driver->WaitForInput(); + if (result.IsError()) { + return result; + } + } + + is_initalized = true; + return ResultSuccess; +} + +Result TouchResource::RequestNextDummyInput() { + if (global_ref_counter == 0) { + return ResultTouchNotInitialized; + } + + if (handheld_config->is_handheld_hid_enabled) { + const Result result = touch_driver->WaitForDummyInput(); + if (result.IsError()) { + return result; + } + } + + is_initalized = false; + return ResultSuccess; +} + +Result TouchResource::ProcessTouchScreenAutoTune() { + touch_driver->ProcessTouchScreenAutoTune(); + return ResultSuccess; +} + +void TouchResource::SetTouchScreenMagnification(f32 point1_x, f32 point1_y, f32 point2_x, + f32 point2_y) { + offset = { + .x = point1_x, + .y = point1_y, + }; + magnification = { + .x = point2_x, + .y = point2_y, + }; +} + +Result TouchResource::SetTouchScreenResolution(u32 width, u32 height, u64 aruid) { + std::scoped_lock lock{*shared_mutex}; + + for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) { + const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index); + TouchAruidData& data = aruid_data[aruid_index]; + + if (!applet_data->flag.is_assigned) { + continue; + } + if (aruid != data.aruid) { + continue; + } + data.resolution_width = static_cast<u16>(width); + data.resolution_height = static_cast<u16>(height); + } + + return ResultSuccess; +} + +Result TouchResource::SetTouchScreenConfiguration( + const Core::HID::TouchScreenConfigurationForNx& touch_configuration, u64 aruid) { + std::scoped_lock lock{*shared_mutex}; + + for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) { + const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index); + TouchAruidData& data = aruid_data[aruid_index]; + + if (!applet_data->flag.is_assigned) { + continue; + } + if (aruid != data.aruid) { + continue; + } + data.finger_map.touch_mode = touch_configuration.mode; + } + + return ResultSuccess; +} + +Result TouchResource::GetTouchScreenConfiguration( + Core::HID::TouchScreenConfigurationForNx& out_touch_configuration, u64 aruid) const { + std::scoped_lock lock{*shared_mutex}; + + for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) { + const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index); + const TouchAruidData& data = aruid_data[aruid_index]; + + if (!applet_data->flag.is_assigned) { + continue; + } + if (aruid != data.aruid) { + continue; + } + out_touch_configuration.mode = data.finger_map.touch_mode; + } + + return ResultSuccess; +} + +Result TouchResource::SetTouchScreenDefaultConfiguration( + const Core::HID::TouchScreenConfigurationForNx& touch_configuration) { + default_touch_screen_mode = touch_configuration.mode; + return ResultSuccess; +} + +Result TouchResource::GetTouchScreenDefaultConfiguration( + Core::HID::TouchScreenConfigurationForNx& out_touch_configuration) const { + out_touch_configuration.mode = default_touch_screen_mode; + return ResultSuccess; +} + +Result TouchResource::Finalize() { + is_auto_pilot_initialized = false; + auto_pilot = {}; + system.CoreTiming().UnscheduleEvent(timer_event); + + const auto result = touch_driver->StopTouchSensor(); + if (result.IsError()) { + return result; + } + + is_initalized = false; + return ResultSuccess; +} + +void TouchResource::StorePreviousTouchState(TouchScreenState& out_previous_touch, + TouchFingerMap& out_finger_map, + const TouchScreenState& current_touch, + bool is_touch_enabled) const { + s32 finger_count{}; + + if (is_touch_enabled) { + finger_count = current_touch.entry_count; + if (finger_count < 1) { + out_finger_map.finger_count = 0; + out_finger_map.finger_ids = {}; + out_previous_touch.sampling_number = current_touch.sampling_number; + out_previous_touch.entry_count = 0; + out_previous_touch.states = {}; + return; + } + for (std::size_t i = 0; i < static_cast<u32>(finger_count); i++) { + out_finger_map.finger_ids[i] = current_touch.states[i].finger; + out_previous_touch.states[i] = current_touch.states[i]; + } + out_finger_map.finger_count = finger_count; + return; + } + + if (!is_touch_enabled && out_finger_map.finger_count > 0 && current_touch.entry_count > 0) { + // TODO + } + + // Zero out unused entries + for (std::size_t i = finger_count; i < MaxFingers; i++) { + out_finger_map.finger_ids[i] = 0; + out_previous_touch.states[i] = {}; + } + + out_previous_touch.sampling_number = current_touch.sampling_number; + out_previous_touch.entry_count = finger_count; +} + +void TouchResource::ReadTouchInput() { + previous_touch_state = current_touch_state; + + if (!is_initalized || !handheld_config->is_handheld_hid_enabled || !touch_driver->IsRunning()) { + touch_driver->WaitForDummyInput(); + } else { + touch_driver->WaitForInput(); + } + + touch_driver->GetNextTouchState(current_touch_state); + SanitizeInput(current_touch_state); + current_touch_state.sampling_number = sample_number; + sample_number++; + + if (is_auto_pilot_initialized && current_touch_state.entry_count == 0) { + const std::size_t finger_count = static_cast<std::size_t>(auto_pilot.count); + current_touch_state.entry_count = static_cast<s32>(finger_count); + for (std::size_t i = 0; i < finger_count; i++) { + current_touch_state.states[i] = auto_pilot.state[i]; + } + + std::size_t index = 0; + for (std::size_t i = 0; i < finger_count; i++) { + if (auto_pilot.state[i].attribute.end_touch) { + continue; + } + auto_pilot.state[i].attribute.raw = 0; + auto_pilot.state[index] = auto_pilot.state[i]; + index++; + } + + auto_pilot.count = index; + for (std::size_t i = index; i < auto_pilot.state.size(); i++) { + auto_pilot.state[i] = {}; + } + } + + for (std::size_t i = 0; i < static_cast<std::size_t>(current_touch_state.entry_count); i++) { + auto& state = current_touch_state.states[i]; + state.position.x = static_cast<u32>((magnification.y * static_cast<f32>(state.position.x)) + + (offset.x * static_cast<f32>(TouchSensorWidth))); + state.position.y = static_cast<u32>((magnification.y * static_cast<f32>(state.position.y)) + + (offset.x * static_cast<f32>(TouchSensorHeight))); + state.diameter_x = static_cast<u32>(magnification.x * static_cast<f32>(state.diameter_x)); + state.diameter_y = static_cast<u32>(magnification.y * static_cast<f32>(state.diameter_y)); + } + + std::size_t index = 0; + for (std::size_t i = 0; i < static_cast<std::size_t>(current_touch_state.entry_count); i++) { + const auto& old_state = current_touch_state.states[i]; + auto& state = current_touch_state.states[index]; + if ((TouchSensorWidth <= old_state.position.x) || + (TouchSensorHeight <= old_state.position.y)) { + continue; + } + state = old_state; + index++; + } + current_touch_state.entry_count = static_cast<s32>(index); + + SanitizeInput(current_touch_state); + + std::scoped_lock lock{*input_mutex}; + if (current_touch_state.entry_count == previous_touch_state.entry_count) { + if (current_touch_state.entry_count < 1) { + return; + } + bool has_moved = false; + for (std::size_t i = 0; i < static_cast<std::size_t>(current_touch_state.entry_count); + i++) { + s32 delta_x = std::abs(static_cast<s32>(current_touch_state.states[i].position.x) - + static_cast<s32>(previous_touch_state.states[i].position.x)); + s32 delta_y = std::abs(static_cast<s32>(current_touch_state.states[i].position.y) - + static_cast<s32>(previous_touch_state.states[i].position.y)); + if (delta_x > 1 || delta_y > 1) { + has_moved = true; + } + } + if (!has_moved) { + return; + } + } + + input_event->Signal(); +} + +void TouchResource::OnTouchUpdate(s64 timestamp) { + if (global_ref_counter == 0) { + return; + } + + ReadTouchInput(); + gesture_handler.SetTouchState(current_touch_state.states, current_touch_state.entry_count, + timestamp); + + std::scoped_lock lock{*shared_mutex}; + + for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) { + const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index); + TouchAruidData& data = aruid_data[aruid_index]; + + if (applet_data == nullptr || !applet_data->flag.is_assigned) { + data = {}; + continue; + } + + if (data.aruid != applet_data->aruid) { + data = {}; + data.aruid = applet_data->aruid; + } + + if (gesture_ref_counter != 0) { + if (!applet_data->flag.enable_touchscreen) { + gesture_state = {}; + } + if (gesture_handler.NeedsUpdate()) { + gesture_handler.UpdateGestureState(gesture_state, timestamp); + auto& gesture_shared = applet_data->shared_memory_format->gesture; + gesture_shared.gesture_lifo.WriteNextEntry(gesture_state); + } + } + + if (touch_ref_counter != 0) { + auto touch_mode = data.finger_map.touch_mode; + if (touch_mode == Core::HID::TouchScreenModeForNx::UseSystemSetting) { + touch_mode = default_touch_screen_mode; + } + + if (applet_resource->GetActiveAruid() == applet_data->aruid && + touch_mode != Core::HID::TouchScreenModeForNx::UseSystemSetting && is_initalized && + handheld_config->is_handheld_hid_enabled && touch_driver->IsRunning()) { + touch_driver->SetTouchMode(touch_mode); + } + + auto& touch_shared = applet_data->shared_memory_format->touch_screen; + StorePreviousTouchState(previous_touch_state, data.finger_map, current_touch_state, + applet_data->flag.enable_touchscreen.As<bool>()); + touch_shared.touch_screen_lifo.WriteNextEntry(current_touch_state); + } + } +} + +void TouchResource::SanitizeInput(TouchScreenState& state) const { + for (std::size_t i = 0; i < static_cast<std::size_t>(state.entry_count); i++) { + auto& entry = state.states[i]; + entry.position.x = + std::clamp(entry.position.x, TouchBorders, TouchSensorWidth - TouchBorders - 1); + entry.position.y = + std::clamp(entry.position.y, TouchBorders, TouchSensorHeight - TouchBorders - 1); + entry.diameter_x = std::clamp(entry.diameter_x, 0u, TouchSensorWidth - MaxTouchDiameter); + entry.diameter_y = std::clamp(entry.diameter_y, 0u, TouchSensorHeight - MaxTouchDiameter); + entry.rotation_angle = + std::clamp(entry.rotation_angle, -MaxRotationAngle, MaxRotationAngle); + } +} + +} // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/touch_screen_resource.h b/src/hid_core/resources/touch_screen/touch_screen_resource.h new file mode 100644 index 000000000..095cddd76 --- /dev/null +++ b/src/hid_core/resources/touch_screen/touch_screen_resource.h @@ -0,0 +1,126 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include <array> +#include <mutex> + +#include "common/common_types.h" +#include "common/point.h" +#include "core/hle/result.h" +#include "hid_core/hid_types.h" +#include "hid_core/resources/touch_screen/gesture_handler.h" +#include "hid_core/resources/touch_screen/touch_types.h" + +namespace Core { +class System; +} + +namespace Core::Timing { +struct EventType; +} + +namespace Kernel { +class KEvent; +} // namespace Kernel + +namespace Service::Set { +class ISystemSettingsServer; +} + +namespace Service::HID { +class AppletResource; +class TouchSharedMemoryManager; +class TouchDriver; +struct HandheldConfig; + +class TouchResource { +public: + TouchResource(Core::System& system_); + ~TouchResource(); + + Result ActivateTouch(); + Result ActivateTouch(u64 aruid); + + Result ActivateGesture(); + Result ActivateGesture(u64 aruid, u32 basic_gesture_id); + + Result DeactivateTouch(); + Result DeactivateGesture(); + + bool IsTouchActive() const; + bool IsGestureActive() const; + + void SetTouchDriver(std::shared_ptr<TouchDriver> driver); + void SetAppletResource(std::shared_ptr<AppletResource> shared, std::recursive_mutex* mutex); + void SetInputEvent(Kernel::KEvent* event, std::mutex* mutex); + void SetHandheldConfig(std::shared_ptr<HandheldConfig> config); + void SetTimerEvent(std::shared_ptr<Core::Timing::EventType> event); + + Result SetTouchScreenAutoPilotState(const AutoPilotState& auto_pilot_state); + Result UnsetTouchScreenAutoPilotState(); + + Result RequestNextTouchInput(); + Result RequestNextDummyInput(); + + Result ProcessTouchScreenAutoTune(); + void SetTouchScreenMagnification(f32 point1_x, f32 point1_y, f32 point2_x, f32 point2_y); + Result SetTouchScreenResolution(u32 width, u32 height, u64 aruid); + + Result SetTouchScreenConfiguration( + const Core::HID::TouchScreenConfigurationForNx& touch_configuration, u64 aruid); + Result GetTouchScreenConfiguration( + Core::HID::TouchScreenConfigurationForNx& out_touch_configuration, u64 aruid) const; + + Result SetTouchScreenDefaultConfiguration( + const Core::HID::TouchScreenConfigurationForNx& touch_configuration); + Result GetTouchScreenDefaultConfiguration( + Core::HID::TouchScreenConfigurationForNx& out_touch_configuration) const; + + void OnTouchUpdate(s64 timestamp); + +private: + Result Finalize(); + + void StorePreviousTouchState(TouchScreenState& out_previous_touch, + TouchFingerMap& out_finger_map, + const TouchScreenState& current_touch, + bool is_touch_enabled) const; + void ReadTouchInput(); + + void SanitizeInput(TouchScreenState& state) const; + + s32 global_ref_counter{}; + s32 gesture_ref_counter{}; + s32 touch_ref_counter{}; + bool is_initalized{}; + u64 sample_number{}; + + // External resources + std::shared_ptr<Core::Timing::EventType> timer_event{nullptr}; + std::shared_ptr<TouchDriver> touch_driver{nullptr}; + std::shared_ptr<AppletResource> applet_resource{nullptr}; + std::recursive_mutex* shared_mutex{nullptr}; + std::shared_ptr<HandheldConfig> handheld_config{nullptr}; + Kernel::KEvent* input_event{nullptr}; + std::mutex* input_mutex{nullptr}; + + // Internal state + TouchScreenState current_touch_state{}; + TouchScreenState previous_touch_state{}; + GestureState gesture_state{}; + bool is_auto_pilot_initialized{}; + AutoPilotState auto_pilot{}; + GestureHandler gesture_handler{}; + std::array<TouchAruidData, 0x20> aruid_data{}; + Common::Point<f32> magnification{1.0f, 1.0f}; + Common::Point<f32> offset{0.0f, 0.0f}; + Core::HID::TouchScreenModeForNx default_touch_screen_mode{ + Core::HID::TouchScreenModeForNx::Finger}; + + Core::System& system; + std::shared_ptr<Service::Set::ISystemSettingsServer> m_set_sys; +}; + +} // namespace Service::HID diff --git a/src/hid_core/resources/touch_screen/touch_types.h b/src/hid_core/resources/touch_screen/touch_types.h index 97ee847da..362088939 100644 --- a/src/hid_core/resources/touch_screen/touch_types.h +++ b/src/hid_core/resources/touch_screen/touch_types.h @@ -13,8 +13,20 @@ #include "hid_core/hid_types.h" namespace Service::HID { -static constexpr std::size_t MAX_FINGERS = 16; -static constexpr size_t MAX_POINTS = 4; +constexpr std::size_t MaxFingers = 16; +constexpr std::size_t MaxPoints = 4; +constexpr u32 TouchSensorWidth = 1280; +constexpr u32 TouchSensorHeight = 720; +constexpr s32 MaxRotationAngle = 270; +constexpr u32 MaxTouchDiameter = 30; +constexpr u32 TouchBorders = 15; + +// HW is around 700, value is set to 400 to make it easier to trigger with mouse +constexpr f32 SwipeThreshold = 400.0f; // Threshold in pixels/s +constexpr f32 AngleThreshold = 0.015f; // Threshold in radians +constexpr f32 PinchThreshold = 0.5f; // Threshold in pixels +constexpr f32 PressDelay = 0.5f; // Time in seconds +constexpr f32 DoubleTapDelay = 0.35f; // Time in seconds // This is nn::hid::GestureType enum class GestureType : u32 { @@ -28,6 +40,7 @@ enum class GestureType : u32 { Swipe, // Fast press movement and release of a single point Pinch, // All points moving away/closer to the midpoint Rotate, // All points rotating from the midpoint + GestureTypeMax = Rotate, }; // This is nn::hid::GestureDirection @@ -69,7 +82,7 @@ struct GestureState { static_assert(sizeof(GestureState) == 0x60, "GestureState is an invalid size"); struct GestureProperties { - std::array<Common::Point<s32>, MAX_POINTS> points{}; + std::array<Common::Point<s32>, MaxPoints> points{}; std::size_t active_points{}; Common::Point<s32> mid_point{}; s64 detection_count{}; @@ -78,13 +91,53 @@ struct GestureProperties { f32 angle{}; }; +// This is nn::hid::TouchState +struct TouchState { + u64 delta_time{}; + Core::HID::TouchAttribute attribute{}; + u32 finger{}; + Common::Point<u32> position{}; + u32 diameter_x{}; + u32 diameter_y{}; + s32 rotation_angle{}; +}; +static_assert(sizeof(TouchState) == 0x28, "Touchstate is an invalid size"); + // This is nn::hid::TouchScreenState struct TouchScreenState { s64 sampling_number{}; s32 entry_count{}; INSERT_PADDING_BYTES(4); // Reserved - std::array<Core::HID::TouchState, MAX_FINGERS> states{}; + std::array<TouchState, MaxFingers> states{}; }; static_assert(sizeof(TouchScreenState) == 0x290, "TouchScreenState is an invalid size"); +struct TouchFingerMap { + s32 finger_count{}; + Core::HID::TouchScreenModeForNx touch_mode; + INSERT_PADDING_BYTES(3); + std::array<u32, MaxFingers> finger_ids{}; +}; +static_assert(sizeof(TouchFingerMap) == 0x48, "TouchFingerMap is an invalid size"); + +struct TouchAruidData { + u64 aruid; + u32 basic_gesture_id; + u64 used_1; + u64 used_2; + u64 used_3; + u64 used_4; + GestureType gesture_type; + u16 resolution_width; + u16 resolution_height; + TouchFingerMap finger_map; +}; +static_assert(sizeof(TouchAruidData) == 0x80, "TouchAruidData is an invalid size"); + +struct AutoPilotState { + u64 count; + std::array<TouchState, 16> state; +}; +static_assert(sizeof(AutoPilotState) == 0x288, "AutoPilotState is an invalid size"); + } // namespace Service::HID diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 0755ba772..16c905db9 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -55,6 +55,7 @@ add_library(video_core STATIC engines/maxwell_dma.h engines/puller.cpp engines/puller.h + framebuffer_config.cpp framebuffer_config.h fsr.cpp fsr.h @@ -115,8 +116,24 @@ add_library(video_core STATIC renderer_null/null_rasterizer.h renderer_null/renderer_null.cpp renderer_null/renderer_null.h + renderer_opengl/present/filters.cpp + renderer_opengl/present/filters.h + renderer_opengl/present/fsr.cpp + renderer_opengl/present/fsr.h + renderer_opengl/present/fxaa.cpp + renderer_opengl/present/fxaa.h + renderer_opengl/present/layer.cpp + renderer_opengl/present/layer.h + renderer_opengl/present/present_uniforms.h + renderer_opengl/present/smaa.cpp + renderer_opengl/present/smaa.h + renderer_opengl/present/util.h + renderer_opengl/present/window_adapt_pass.cpp + renderer_opengl/present/window_adapt_pass.h renderer_opengl/blit_image.cpp renderer_opengl/blit_image.h + renderer_opengl/gl_blit_screen.cpp + renderer_opengl/gl_blit_screen.h renderer_opengl/gl_buffer_cache_base.cpp renderer_opengl/gl_buffer_cache.cpp renderer_opengl/gl_buffer_cache.h @@ -126,8 +143,6 @@ add_library(video_core STATIC renderer_opengl/gl_device.h renderer_opengl/gl_fence_manager.cpp renderer_opengl/gl_fence_manager.h - renderer_opengl/gl_fsr.cpp - renderer_opengl/gl_fsr.h renderer_opengl/gl_graphics_pipeline.cpp renderer_opengl/gl_graphics_pipeline.h renderer_opengl/gl_rasterizer.cpp @@ -155,6 +170,22 @@ add_library(video_core STATIC renderer_opengl/renderer_opengl.h renderer_opengl/util_shaders.cpp renderer_opengl/util_shaders.h + renderer_vulkan/present/anti_alias_pass.h + renderer_vulkan/present/filters.cpp + renderer_vulkan/present/filters.h + renderer_vulkan/present/fsr.cpp + renderer_vulkan/present/fsr.h + renderer_vulkan/present/fxaa.cpp + renderer_vulkan/present/fxaa.h + renderer_vulkan/present/layer.cpp + renderer_vulkan/present/layer.h + renderer_vulkan/present/present_push_constants.h + renderer_vulkan/present/smaa.cpp + renderer_vulkan/present/smaa.h + renderer_vulkan/present/util.cpp + renderer_vulkan/present/util.h + renderer_vulkan/present/window_adapt_pass.cpp + renderer_vulkan/present/window_adapt_pass.h renderer_vulkan/blit_image.cpp renderer_vulkan/blit_image.h renderer_vulkan/fixed_pipeline_state.cpp @@ -181,8 +212,6 @@ add_library(video_core STATIC renderer_vulkan/vk_descriptor_pool.h renderer_vulkan/vk_fence_manager.cpp renderer_vulkan/vk_fence_manager.h - renderer_vulkan/vk_fsr.cpp - renderer_vulkan/vk_fsr.h renderer_vulkan/vk_graphics_pipeline.cpp renderer_vulkan/vk_graphics_pipeline.h renderer_vulkan/vk_master_semaphore.cpp @@ -203,8 +232,6 @@ add_library(video_core STATIC renderer_vulkan/vk_scheduler.h renderer_vulkan/vk_shader_util.cpp renderer_vulkan/vk_shader_util.h - renderer_vulkan/vk_smaa.cpp - renderer_vulkan/vk_smaa.h renderer_vulkan/vk_staging_buffer_pool.cpp renderer_vulkan/vk_staging_buffer_pool.h renderer_vulkan/vk_state_tracker.cpp diff --git a/src/video_core/engines/maxwell_dma.h b/src/video_core/engines/maxwell_dma.h index 1a43e24b6..99341e431 100644 --- a/src/video_core/engines/maxwell_dma.h +++ b/src/video_core/engines/maxwell_dma.h @@ -8,6 +8,7 @@ #include <vector> #include "common/bit_field.h" +#include "common/common_funcs.h" #include "common/common_types.h" #include "common/scratch_buffer.h" #include "video_core/engines/engine_interface.h" diff --git a/src/video_core/engines/sw_blitter/blitter.cpp b/src/video_core/engines/sw_blitter/blitter.cpp index 4bc079024..8bcc2f7a7 100644 --- a/src/video_core/engines/sw_blitter/blitter.cpp +++ b/src/video_core/engines/sw_blitter/blitter.cpp @@ -111,6 +111,20 @@ void Bilinear(std::span<const f32> input, std::span<f32> output, size_t src_widt } } +template <bool unpack> +void ProcessPitchLinear(std::span<const u8> input, std::span<u8> output, size_t extent_x, + size_t extent_y, u32 pitch, u32 x0, u32 y0, size_t bpp) { + const size_t base_offset = x0 * bpp; + const size_t copy_size = extent_x * bpp; + for (size_t y = 0; y < extent_y; y++) { + const size_t first_offset = (y + y0) * pitch + base_offset; + const size_t second_offset = y * extent_x * bpp; + u8* write_to = unpack ? &output[first_offset] : &output[second_offset]; + const u8* read_from = unpack ? &input[second_offset] : &input[first_offset]; + std::memcpy(write_to, read_from, copy_size); + } +} + } // namespace struct SoftwareBlitEngine::BlitEngineImpl { @@ -138,19 +152,6 @@ bool SoftwareBlitEngine::Blit(Fermi2D::Surface& src, Fermi2D::Surface& dst, } return static_cast<size_t>(surface.pitch * surface.height); }; - const auto process_pitch_linear = [](bool unpack, std::span<const u8> input, - std::span<u8> output, u32 extent_x, u32 extent_y, - u32 pitch, u32 x0, u32 y0, size_t bpp) { - const size_t base_offset = x0 * bpp; - const size_t copy_size = extent_x * bpp; - for (u32 y = y0; y < extent_y; y++) { - const size_t first_offset = y * pitch + base_offset; - const size_t second_offset = y * extent_x * bpp; - u8* write_to = unpack ? &output[first_offset] : &output[second_offset]; - const u8* read_from = unpack ? &input[second_offset] : &input[first_offset]; - std::memcpy(write_to, read_from, copy_size); - } - }; const u32 src_extent_x = config.src_x1 - config.src_x0; const u32 src_extent_y = config.src_y1 - config.src_y0; @@ -205,8 +206,8 @@ bool SoftwareBlitEngine::Blit(Fermi2D::Surface& src, Fermi2D::Surface& dst, src.depth, config.src_x0, config.src_y0, src_extent_x, src_extent_y, src.block_height, src.block_depth, src_extent_x * src_bytes_per_pixel); } else { - process_pitch_linear(false, tmp_buffer, impl->src_buffer, src_extent_x, src_extent_y, - src.pitch, config.src_x0, config.src_y0, src_bytes_per_pixel); + ProcessPitchLinear<false>(tmp_buffer, impl->src_buffer, src_extent_x, src_extent_y, + src.pitch, config.src_x0, config.src_y0, src_bytes_per_pixel); } // Conversion Phase @@ -229,9 +230,9 @@ bool SoftwareBlitEngine::Blit(Fermi2D::Surface& src, Fermi2D::Surface& dst, dst.depth, config.dst_x0, config.dst_y0, dst_extent_x, dst_extent_y, dst.block_height, dst.block_depth, dst_extent_x * dst_bytes_per_pixel); } else { - process_pitch_linear(true, impl->dst_buffer, tmp_buffer2, dst_extent_x, dst_extent_y, - dst.pitch, config.dst_x0, config.dst_y0, - static_cast<size_t>(dst_bytes_per_pixel)); + ProcessPitchLinear<true>(impl->dst_buffer, tmp_buffer2, dst_extent_x, dst_extent_y, + dst.pitch, config.dst_x0, config.dst_y0, + static_cast<size_t>(dst_bytes_per_pixel)); } return true; } diff --git a/src/video_core/framebuffer_config.cpp b/src/video_core/framebuffer_config.cpp new file mode 100644 index 000000000..e28d41f84 --- /dev/null +++ b/src/video_core/framebuffer_config.cpp @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/assert.h" +#include "video_core/framebuffer_config.h" + +namespace Tegra { + +Common::Rectangle<f32> NormalizeCrop(const FramebufferConfig& framebuffer, u32 texture_width, + u32 texture_height) { + f32 left, top, right, bottom; + + if (!framebuffer.crop_rect.IsEmpty()) { + // If crop rectangle is not empty, apply properties from rectangle. + left = static_cast<f32>(framebuffer.crop_rect.left); + top = static_cast<f32>(framebuffer.crop_rect.top); + right = static_cast<f32>(framebuffer.crop_rect.right); + bottom = static_cast<f32>(framebuffer.crop_rect.bottom); + } else { + // Otherwise, fall back to framebuffer dimensions. + left = 0; + top = 0; + right = static_cast<f32>(framebuffer.width); + bottom = static_cast<f32>(framebuffer.height); + } + + // Apply transformation flags. + auto framebuffer_transform_flags = framebuffer.transform_flags; + + if (True(framebuffer_transform_flags & Service::android::BufferTransformFlags::FlipH)) { + // Switch left and right. + std::swap(left, right); + } + if (True(framebuffer_transform_flags & Service::android::BufferTransformFlags::FlipV)) { + // Switch top and bottom. + std::swap(top, bottom); + } + + framebuffer_transform_flags &= ~Service::android::BufferTransformFlags::FlipH; + framebuffer_transform_flags &= ~Service::android::BufferTransformFlags::FlipV; + if (True(framebuffer_transform_flags)) { + UNIMPLEMENTED_MSG("Unsupported framebuffer_transform_flags={}", + static_cast<u32>(framebuffer_transform_flags)); + } + + // Normalize coordinate space. + left /= static_cast<f32>(texture_width); + top /= static_cast<f32>(texture_height); + right /= static_cast<f32>(texture_width); + bottom /= static_cast<f32>(texture_height); + + return Common::Rectangle<f32>(left, top, right, bottom); +} + +} // namespace Tegra diff --git a/src/video_core/framebuffer_config.h b/src/video_core/framebuffer_config.h index 856f4bd52..6a18b76fb 100644 --- a/src/video_core/framebuffer_config.h +++ b/src/video_core/framebuffer_config.h @@ -7,6 +7,7 @@ #include "common/math_util.h" #include "core/hle/service/nvnflinger/buffer_transform_flags.h" #include "core/hle/service/nvnflinger/pixel_format.h" +#include "core/hle/service/nvnflinger/ui/fence.h" namespace Tegra { @@ -21,7 +22,10 @@ struct FramebufferConfig { u32 stride{}; Service::android::PixelFormat pixel_format{}; Service::android::BufferTransformFlags transform_flags{}; - Common::Rectangle<int> crop_rect; + Common::Rectangle<int> crop_rect{}; }; +Common::Rectangle<f32> NormalizeCrop(const FramebufferConfig& framebuffer, u32 texture_width, + u32 texture_height); + } // namespace Tegra diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 609704b33..f4a5d831c 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp @@ -274,11 +274,6 @@ struct GPU::Impl { } } - /// Swap buffers (render frame) - void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { - gpu_thread.SwapBuffers(framebuffer); - } - /// Notify rasterizer that any caches of the specified region should be flushed to Switch memory void FlushRegion(DAddr addr, u64 size) { gpu_thread.FlushRegion(addr, size); @@ -313,8 +308,9 @@ struct GPU::Impl { gpu_thread.FlushAndInvalidateRegion(addr, size); } - void RequestSwapBuffers(const Tegra::FramebufferConfig* framebuffer, - std::array<Service::Nvidia::NvFence, 4>& fences, size_t num_fences) { + void RequestComposite(std::vector<Tegra::FramebufferConfig>&& layers, + std::vector<Service::Nvidia::NvFence>&& fences) { + size_t num_fences{fences.size()}; size_t current_request_counter{}; { std::unique_lock<std::mutex> lk(request_swap_mutex); @@ -328,13 +324,12 @@ struct GPU::Impl { } } const auto wait_fence = - RequestSyncOperation([this, current_request_counter, framebuffer, fences, num_fences] { + RequestSyncOperation([this, current_request_counter, &layers, &fences, num_fences] { auto& syncpoint_manager = host1x.GetSyncpointManager(); if (num_fences == 0) { - renderer->SwapBuffers(framebuffer); + renderer->Composite(layers); } - const auto executer = [this, current_request_counter, - framebuffer_copy = *framebuffer]() { + const auto executer = [this, current_request_counter, layers_copy = layers]() { { std::unique_lock<std::mutex> lk(request_swap_mutex); if (--request_swap_counters[current_request_counter] != 0) { @@ -342,7 +337,7 @@ struct GPU::Impl { } free_swap_counters.push_back(current_request_counter); } - renderer->SwapBuffers(&framebuffer_copy); + renderer->Composite(layers_copy); }; for (size_t i = 0; i < num_fences; i++) { syncpoint_manager.RegisterGuestAction(fences[i].id, fences[i].value, executer); @@ -505,9 +500,9 @@ const VideoCore::ShaderNotify& GPU::ShaderNotify() const { return impl->ShaderNotify(); } -void GPU::RequestSwapBuffers(const Tegra::FramebufferConfig* framebuffer, - std::array<Service::Nvidia::NvFence, 4>& fences, size_t num_fences) { - impl->RequestSwapBuffers(framebuffer, fences, num_fences); +void GPU::RequestComposite(std::vector<Tegra::FramebufferConfig>&& layers, + std::vector<Service::Nvidia::NvFence>&& fences) { + impl->RequestComposite(std::move(layers), std::move(fences)); } u64 GPU::GetTicks() const { @@ -554,10 +549,6 @@ void GPU::ClearCdmaInstance(u32 id) { impl->ClearCdmaInstance(id); } -void GPU::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { - impl->SwapBuffers(framebuffer); -} - VideoCore::RasterizerDownloadArea GPU::OnCPURead(PAddr addr, u64 size) { return impl->OnCPURead(addr, size); } diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index b3c1d15bd..c4602ca37 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h @@ -212,8 +212,8 @@ public: void RendererFrameEndNotify(); - void RequestSwapBuffers(const Tegra::FramebufferConfig* framebuffer, - std::array<Service::Nvidia::NvFence, 4>& fences, size_t num_fences); + void RequestComposite(std::vector<Tegra::FramebufferConfig>&& layers, + std::vector<Service::Nvidia::NvFence>&& fences); /// Performs any additional setup necessary in order to begin GPU emulation. /// This can be used to launch any necessary threads and register any necessary diff --git a/src/video_core/gpu_thread.cpp b/src/video_core/gpu_thread.cpp index 788d4f61e..58d8110b8 100644 --- a/src/video_core/gpu_thread.cpp +++ b/src/video_core/gpu_thread.cpp @@ -40,8 +40,6 @@ static void RunThread(std::stop_token stop_token, Core::System& system, } if (auto* submit_list = std::get_if<SubmitListCommand>(&next.data)) { scheduler.Push(submit_list->channel, std::move(submit_list->entries)); - } else if (const auto* data = std::get_if<SwapBuffersCommand>(&next.data)) { - renderer.SwapBuffers(data->framebuffer ? &*data->framebuffer : nullptr); } else if (std::holds_alternative<GPUTickCommand>(next.data)) { system.GPU().TickWork(); } else if (const auto* flush = std::get_if<FlushRegionCommand>(&next.data)) { @@ -78,10 +76,6 @@ void ThreadManager::SubmitList(s32 channel, Tegra::CommandList&& entries) { PushCommand(SubmitListCommand(channel, std::move(entries))); } -void ThreadManager::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { - PushCommand(SwapBuffersCommand(framebuffer ? std::make_optional(*framebuffer) : std::nullopt)); -} - void ThreadManager::FlushRegion(DAddr addr, u64 size) { if (!is_async) { // Always flush with synchronous GPU mode diff --git a/src/video_core/gpu_thread.h b/src/video_core/gpu_thread.h index 2de25e9ef..dc0fce9f8 100644 --- a/src/video_core/gpu_thread.h +++ b/src/video_core/gpu_thread.h @@ -44,14 +44,6 @@ struct SubmitListCommand final { Tegra::CommandList entries; }; -/// Command to signal to the GPU thread that a swap buffers is pending -struct SwapBuffersCommand final { - explicit SwapBuffersCommand(std::optional<const Tegra::FramebufferConfig> framebuffer_) - : framebuffer{std::move(framebuffer_)} {} - - std::optional<Tegra::FramebufferConfig> framebuffer; -}; - /// Command to signal to the GPU thread to flush a region struct FlushRegionCommand final { explicit constexpr FlushRegionCommand(DAddr addr_, u64 size_) : addr{addr_}, size{size_} {} @@ -81,8 +73,8 @@ struct FlushAndInvalidateRegionCommand final { struct GPUTickCommand final {}; using CommandData = - std::variant<std::monostate, SubmitListCommand, SwapBuffersCommand, FlushRegionCommand, - InvalidateRegionCommand, FlushAndInvalidateRegionCommand, GPUTickCommand>; + std::variant<std::monostate, SubmitListCommand, FlushRegionCommand, InvalidateRegionCommand, + FlushAndInvalidateRegionCommand, GPUTickCommand>; struct CommandDataContainer { CommandDataContainer() = default; @@ -118,9 +110,6 @@ public: /// Push GPU command entries to be processed void SubmitList(s32 channel, Tegra::CommandList&& entries); - /// Swap buffers (render frame) - void SwapBuffers(const Tegra::FramebufferConfig* framebuffer); - /// Notify rasterizer that any caches of the specified region should be flushed to Switch memory void FlushRegion(DAddr addr, u64 size); diff --git a/src/video_core/host_shaders/CMakeLists.txt b/src/video_core/host_shaders/CMakeLists.txt index cd2549232..969f21d50 100644 --- a/src/video_core/host_shaders/CMakeLists.txt +++ b/src/video_core/host_shaders/CMakeLists.txt @@ -9,7 +9,7 @@ set(FIDELITYFX_FILES ) set(GLSL_INCLUDES - fidelityfx_fsr.comp + fidelityfx_fsr.frag ${FIDELITYFX_FILES} ) @@ -56,10 +56,11 @@ set(SHADER_FILES vulkan_color_clear.frag vulkan_color_clear.vert vulkan_depthstencil_clear.frag - vulkan_fidelityfx_fsr_easu_fp16.comp - vulkan_fidelityfx_fsr_easu_fp32.comp - vulkan_fidelityfx_fsr_rcas_fp16.comp - vulkan_fidelityfx_fsr_rcas_fp32.comp + vulkan_fidelityfx_fsr.vert + vulkan_fidelityfx_fsr_easu_fp16.frag + vulkan_fidelityfx_fsr_easu_fp32.frag + vulkan_fidelityfx_fsr_rcas_fp16.frag + vulkan_fidelityfx_fsr_rcas_fp32.frag vulkan_present.frag vulkan_present.vert vulkan_present_scaleforce_fp16.frag diff --git a/src/video_core/host_shaders/fidelityfx_fsr.comp b/src/video_core/host_shaders/fidelityfx_fsr.frag index f91b1aa9f..a266e1c4e 100644 --- a/src/video_core/host_shaders/fidelityfx_fsr.comp +++ b/src/video_core/host_shaders/fidelityfx_fsr.frag @@ -34,7 +34,6 @@ layout( push_constant ) uniform constants { }; layout(set=0,binding=0) uniform sampler2D InputTexture; -layout(set=0,binding=1,rgba16f) uniform image2D OutputTexture; #define A_GPU 1 #define A_GLSL 1 @@ -72,44 +71,40 @@ layout(set=0,binding=1,rgba16f) uniform image2D OutputTexture; #include "ffx_fsr1.h" -void CurrFilter(AU2 pos) { -#if USE_BILINEAR - AF2 pp = (AF2(pos) * AF2_AU2(Const0.xy) + AF2_AU2(Const0.zw)) * AF2_AU2(Const1.xy) + AF2(0.5, -0.5) * AF2_AU2(Const1.zw); - imageStore(OutputTexture, ASU2(pos), textureLod(InputTexture, pp, 0.0)); +#if USE_RCAS + layout(location = 0) in vec2 frag_texcoord; #endif +layout (location = 0) out vec4 frag_color; + +void CurrFilter(AU2 pos) { #if USE_EASU #ifndef YUZU_USE_FP16 AF3 c; FsrEasuF(c, pos, Const0, Const1, Const2, Const3); - imageStore(OutputTexture, ASU2(pos), AF4(c, 1)); + frag_color = AF4(c, 1.0); #else AH3 c; FsrEasuH(c, pos, Const0, Const1, Const2, Const3); - imageStore(OutputTexture, ASU2(pos), AH4(c, 1)); + frag_color = AH4(c, 1.0); #endif #endif #if USE_RCAS #ifndef YUZU_USE_FP16 AF3 c; FsrRcasF(c.r, c.g, c.b, pos, Const0); - imageStore(OutputTexture, ASU2(pos), AF4(c, 1)); + frag_color = AF4(c, 1.0); #else AH3 c; FsrRcasH(c.r, c.g, c.b, pos, Const0); - imageStore(OutputTexture, ASU2(pos), AH4(c, 1)); + frag_color = AH4(c, 1.0); #endif #endif } -layout(local_size_x=64) in; void main() { - // Do remapping of local xy in workgroup for a more PS-like swizzle pattern. - AU2 gxy = ARmp8x8(gl_LocalInvocationID.x) + AU2(gl_WorkGroupID.x << 4u, gl_WorkGroupID.y << 4u); - CurrFilter(gxy); - gxy.x += 8u; - CurrFilter(gxy); - gxy.y += 8u; - CurrFilter(gxy); - gxy.x -= 8u; - CurrFilter(gxy); +#if USE_RCAS + CurrFilter(AU2(frag_texcoord * vec2(textureSize(InputTexture, 0)))); +#else + CurrFilter(AU2(gl_FragCoord.xy)); +#endif } diff --git a/src/video_core/host_shaders/fxaa.vert b/src/video_core/host_shaders/fxaa.vert index c2717d90d..223ab785e 100644 --- a/src/video_core/host_shaders/fxaa.vert +++ b/src/video_core/host_shaders/fxaa.vert @@ -7,8 +7,8 @@ out gl_PerVertex { vec4 gl_Position; }; -const vec2 vertices[4] = - vec2[4](vec2(-1.0, 1.0), vec2(1.0, 1.0), vec2(-1.0, -1.0), vec2(1.0, -1.0)); +const vec2 vertices[3] = + vec2[3](vec2(-1,-1), vec2(3,-1), vec2(-1, 3)); layout (location = 0) out vec4 posPos; diff --git a/src/video_core/host_shaders/opengl_present_scaleforce.frag b/src/video_core/host_shaders/opengl_present_scaleforce.frag index a780373e3..1598575a1 100644 --- a/src/video_core/host_shaders/opengl_present_scaleforce.frag +++ b/src/video_core/host_shaders/opengl_present_scaleforce.frag @@ -26,21 +26,11 @@ #endif -#ifdef VULKAN - -#define BINDING_COLOR_TEXTURE 1 - -#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv - -#define BINDING_COLOR_TEXTURE 0 - -#endif - layout (location = 0) in vec2 tex_coord; layout (location = 0) out vec4 frag_color; -layout (binding = BINDING_COLOR_TEXTURE) uniform sampler2D input_texture; +layout (binding = 0) uniform sampler2D input_texture; const bool ignore_alpha = true; diff --git a/src/video_core/host_shaders/present_bicubic.frag b/src/video_core/host_shaders/present_bicubic.frag index c57dd2851..c814629cf 100644 --- a/src/video_core/host_shaders/present_bicubic.frag +++ b/src/video_core/host_shaders/present_bicubic.frag @@ -3,22 +3,12 @@ #version 460 core -#ifdef VULKAN - -#define BINDING_COLOR_TEXTURE 1 - -#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv - -#define BINDING_COLOR_TEXTURE 0 - -#endif - layout (location = 0) in vec2 frag_tex_coord; layout (location = 0) out vec4 color; -layout (binding = BINDING_COLOR_TEXTURE) uniform sampler2D color_texture; +layout (binding = 0) uniform sampler2D color_texture; vec4 cubic(float v) { vec4 n = vec4(1.0, 2.0, 3.0, 4.0) - v; diff --git a/src/video_core/host_shaders/present_gaussian.frag b/src/video_core/host_shaders/present_gaussian.frag index 5f54b71b6..ad9bb76a4 100644 --- a/src/video_core/host_shaders/present_gaussian.frag +++ b/src/video_core/host_shaders/present_gaussian.frag @@ -7,21 +7,11 @@ #version 460 core -#ifdef VULKAN - -#define BINDING_COLOR_TEXTURE 1 - -#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv - -#define BINDING_COLOR_TEXTURE 0 - -#endif - layout(location = 0) in vec2 frag_tex_coord; layout(location = 0) out vec4 color; -layout(binding = BINDING_COLOR_TEXTURE) uniform sampler2D color_texture; +layout(binding = 0) uniform sampler2D color_texture; const float offset[3] = float[](0.0, 1.3846153846, 3.2307692308); const float weight[3] = float[](0.2270270270, 0.3162162162, 0.0702702703); diff --git a/src/video_core/host_shaders/vulkan_fidelityfx_fsr.vert b/src/video_core/host_shaders/vulkan_fidelityfx_fsr.vert new file mode 100644 index 000000000..6a87a7cac --- /dev/null +++ b/src/video_core/host_shaders/vulkan_fidelityfx_fsr.vert @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#version 450 + +layout(location = 0) out vec2 texcoord; + +void main() { + float x = float((gl_VertexIndex & 1) << 2); + float y = float((gl_VertexIndex & 2) << 1); + gl_Position = vec4(x - 1.0, y - 1.0, 0.0, 1.0); + texcoord = vec2(x, y) / 2.0; +} diff --git a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp16.comp b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp16.frag index 00af13726..d369bef06 100644 --- a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp16.comp +++ b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp16.frag @@ -7,4 +7,4 @@ #define YUZU_USE_FP16 #define USE_EASU 1 -#include "fidelityfx_fsr.comp" +#include "fidelityfx_fsr.frag" diff --git a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp32.comp b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp32.frag index 13d783fa8..6f25ef00f 100644 --- a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp32.comp +++ b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp32.frag @@ -6,4 +6,4 @@ #define USE_EASU 1 -#include "fidelityfx_fsr.comp" +#include "fidelityfx_fsr.frag" diff --git a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp16.comp b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp16.frag index 331549d96..0c953a900 100644 --- a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp16.comp +++ b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp16.frag @@ -7,4 +7,4 @@ #define YUZU_USE_FP16 #define USE_RCAS 1 -#include "fidelityfx_fsr.comp" +#include "fidelityfx_fsr.frag" diff --git a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp32.comp b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp32.frag index 013ca0014..02e9a27c6 100644 --- a/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp32.comp +++ b/src/video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp32.frag @@ -6,4 +6,4 @@ #define USE_RCAS 1 -#include "fidelityfx_fsr.comp" +#include "fidelityfx_fsr.frag" diff --git a/src/video_core/host_shaders/vulkan_present.frag b/src/video_core/host_shaders/vulkan_present.frag index 97e098ced..adada9411 100644 --- a/src/video_core/host_shaders/vulkan_present.frag +++ b/src/video_core/host_shaders/vulkan_present.frag @@ -7,7 +7,7 @@ layout (location = 0) in vec2 frag_tex_coord; layout (location = 0) out vec4 color; -layout (binding = 1) uniform sampler2D color_texture; +layout (binding = 0) uniform sampler2D color_texture; void main() { color = texture(color_texture, frag_tex_coord); diff --git a/src/video_core/host_shaders/vulkan_present.vert b/src/video_core/host_shaders/vulkan_present.vert index 89dc80468..249c9675a 100644 --- a/src/video_core/host_shaders/vulkan_present.vert +++ b/src/video_core/host_shaders/vulkan_present.vert @@ -3,16 +3,37 @@ #version 460 core -layout (location = 0) in vec2 vert_position; -layout (location = 1) in vec2 vert_tex_coord; - layout (location = 0) out vec2 frag_tex_coord; -layout (set = 0, binding = 0) uniform MatrixBlock { +struct ScreenRectVertex { + vec2 position; + vec2 tex_coord; +}; + +layout (push_constant) uniform PushConstants { mat4 modelview_matrix; + ScreenRectVertex vertices[4]; }; +// Vulkan spec 15.8.1: +// Any member of a push constant block that is declared as an +// array must only be accessed with dynamically uniform indices. +ScreenRectVertex GetVertex(int index) { + switch (index) { + case 0: + default: + return vertices[0]; + case 1: + return vertices[1]; + case 2: + return vertices[2]; + case 3: + return vertices[3]; + } +} + void main() { - gl_Position = modelview_matrix * vec4(vert_position, 0.0, 1.0); - frag_tex_coord = vert_tex_coord; + ScreenRectVertex vertex = GetVertex(gl_VertexIndex); + gl_Position = modelview_matrix * vec4(vertex.position, 0.0, 1.0); + frag_tex_coord = vertex.tex_coord; } diff --git a/src/video_core/host_shaders/vulkan_present_scaleforce_fp16.frag b/src/video_core/host_shaders/vulkan_present_scaleforce_fp16.frag index 3dc9c0df5..79ea817c2 100644 --- a/src/video_core/host_shaders/vulkan_present_scaleforce_fp16.frag +++ b/src/video_core/host_shaders/vulkan_present_scaleforce_fp16.frag @@ -5,6 +5,7 @@ #extension GL_GOOGLE_include_directive : enable +#define VERSION 1 #define YUZU_USE_FP16 #include "opengl_present_scaleforce.frag" diff --git a/src/video_core/host_shaders/vulkan_present_scaleforce_fp32.frag b/src/video_core/host_shaders/vulkan_present_scaleforce_fp32.frag index 77ed07552..9605bb58b 100644 --- a/src/video_core/host_shaders/vulkan_present_scaleforce_fp32.frag +++ b/src/video_core/host_shaders/vulkan_present_scaleforce_fp32.frag @@ -5,4 +5,6 @@ #extension GL_GOOGLE_include_directive : enable +#define VERSION 1 + #include "opengl_present_scaleforce.frag" diff --git a/src/video_core/rasterizer_interface.h b/src/video_core/rasterizer_interface.h index 8fa4e4d9a..6e2eccfbf 100644 --- a/src/video_core/rasterizer_interface.h +++ b/src/video_core/rasterizer_interface.h @@ -155,12 +155,6 @@ public: virtual void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, std::span<const u8> memory) = 0; - /// Attempt to use a faster method to display the framebuffer to screen - [[nodiscard]] virtual bool AccelerateDisplay(const Tegra::FramebufferConfig& config, - DAddr framebuffer_addr, u32 pixel_stride) { - return false; - } - /// Initialize disk cached resources for the game being emulated virtual void LoadDiskResources(u64 title_id, std::stop_token stop_loading, const DiskResourceLoadCallback& callback) {} diff --git a/src/video_core/renderer_base.h b/src/video_core/renderer_base.h index 78ea5208b..3ad180f67 100644 --- a/src/video_core/renderer_base.h +++ b/src/video_core/renderer_base.h @@ -38,7 +38,7 @@ public: virtual ~RendererBase(); /// Finalize rendering the guest frame and draw into the presentation texture - virtual void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) = 0; + virtual void Composite(std::span<const Tegra::FramebufferConfig> layers) = 0; [[nodiscard]] virtual RasterizerInterface* ReadRasterizer() = 0; diff --git a/src/video_core/renderer_null/null_rasterizer.cpp b/src/video_core/renderer_null/null_rasterizer.cpp index abfabb65b..a5cda0f38 100644 --- a/src/video_core/renderer_null/null_rasterizer.cpp +++ b/src/video_core/renderer_null/null_rasterizer.cpp @@ -92,10 +92,6 @@ bool RasterizerNull::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surfac } void RasterizerNull::AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, std::span<const u8> memory) {} -bool RasterizerNull::AccelerateDisplay(const Tegra::FramebufferConfig& config, - DAddr framebuffer_addr, u32 pixel_stride) { - return true; -} void RasterizerNull::LoadDiskResources(u64 title_id, std::stop_token stop_loading, const VideoCore::DiskResourceLoadCallback& callback) {} void RasterizerNull::InitializeChannel(Tegra::Control::ChannelState& channel) { diff --git a/src/video_core/renderer_null/null_rasterizer.h b/src/video_core/renderer_null/null_rasterizer.h index a5789604f..c7f5849c7 100644 --- a/src/video_core/renderer_null/null_rasterizer.h +++ b/src/video_core/renderer_null/null_rasterizer.h @@ -77,8 +77,6 @@ public: Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, std::span<const u8> memory) override; - bool AccelerateDisplay(const Tegra::FramebufferConfig& config, DAddr framebuffer_addr, - u32 pixel_stride) override; void LoadDiskResources(u64 title_id, std::stop_token stop_loading, const VideoCore::DiskResourceLoadCallback& callback) override; void InitializeChannel(Tegra::Control::ChannelState& channel) override; diff --git a/src/video_core/renderer_null/renderer_null.cpp b/src/video_core/renderer_null/renderer_null.cpp index 078feb925..c89daff53 100644 --- a/src/video_core/renderer_null/renderer_null.cpp +++ b/src/video_core/renderer_null/renderer_null.cpp @@ -13,8 +13,8 @@ RendererNull::RendererNull(Core::Frontend::EmuWindow& emu_window, Tegra::GPU& gp RendererNull::~RendererNull() = default; -void RendererNull::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { - if (!framebuffer) { +void RendererNull::Composite(std::span<const Tegra::FramebufferConfig> framebuffers) { + if (framebuffers.empty()) { return; } diff --git a/src/video_core/renderer_null/renderer_null.h b/src/video_core/renderer_null/renderer_null.h index 9531b43f6..063b476bb 100644 --- a/src/video_core/renderer_null/renderer_null.h +++ b/src/video_core/renderer_null/renderer_null.h @@ -17,7 +17,7 @@ public: std::unique_ptr<Core::Frontend::GraphicsContext> context); ~RendererNull() override; - void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override; + void Composite(std::span<const Tegra::FramebufferConfig> framebuffer) override; VideoCore::RasterizerInterface* ReadRasterizer() override { return &m_rasterizer; diff --git a/src/video_core/renderer_opengl/gl_blit_screen.cpp b/src/video_core/renderer_opengl/gl_blit_screen.cpp new file mode 100644 index 000000000..6ba8b214b --- /dev/null +++ b/src/video_core/renderer_opengl/gl_blit_screen.cpp @@ -0,0 +1,96 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/settings.h" +#include "video_core/renderer_opengl/gl_blit_screen.h" +#include "video_core/renderer_opengl/gl_state_tracker.h" +#include "video_core/renderer_opengl/present/filters.h" +#include "video_core/renderer_opengl/present/layer.h" +#include "video_core/renderer_opengl/present/window_adapt_pass.h" + +namespace OpenGL { + +BlitScreen::BlitScreen(RasterizerOpenGL& rasterizer_, + Tegra::MaxwellDeviceMemoryManager& device_memory_, + StateTracker& state_tracker_, ProgramManager& program_manager_, + Device& device_) + : rasterizer(rasterizer_), device_memory(device_memory_), state_tracker(state_tracker_), + program_manager(program_manager_), device(device_) {} + +BlitScreen::~BlitScreen() = default; + +void BlitScreen::DrawScreen(std::span<const Tegra::FramebufferConfig> framebuffers, + const Layout::FramebufferLayout& layout) { + // TODO: Signal state tracker about these changes + state_tracker.NotifyScreenDrawVertexArray(); + state_tracker.NotifyPolygonModes(); + state_tracker.NotifyViewport0(); + state_tracker.NotifyScissor0(); + state_tracker.NotifyColorMask(0); + state_tracker.NotifyBlend0(); + state_tracker.NotifyFramebuffer(); + state_tracker.NotifyFrontFace(); + state_tracker.NotifyCullTest(); + state_tracker.NotifyDepthTest(); + state_tracker.NotifyStencilTest(); + state_tracker.NotifyPolygonOffset(); + state_tracker.NotifyRasterizeEnable(); + state_tracker.NotifyFramebufferSRGB(); + state_tracker.NotifyLogicOp(); + state_tracker.NotifyClipControl(); + state_tracker.NotifyAlphaTest(); + state_tracker.ClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); + + glEnable(GL_CULL_FACE); + glDisable(GL_COLOR_LOGIC_OP); + glDisable(GL_DEPTH_TEST); + glDisable(GL_STENCIL_TEST); + glDisable(GL_POLYGON_OFFSET_FILL); + glDisable(GL_RASTERIZER_DISCARD); + glDisable(GL_ALPHA_TEST); + glDisablei(GL_BLEND, 0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glCullFace(GL_BACK); + glFrontFace(GL_CW); + glColorMaski(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + glDepthRangeIndexed(0, 0.0, 0.0); + + while (layers.size() < framebuffers.size()) { + layers.emplace_back(rasterizer, device_memory); + } + + CreateWindowAdapt(); + window_adapt->DrawToFramebuffer(program_manager, layers, framebuffers, layout); + + // TODO + // program_manager.RestoreGuestPipeline(); +} + +void BlitScreen::CreateWindowAdapt() { + if (window_adapt && Settings::values.scaling_filter.GetValue() == current_window_adapt) { + return; + } + + current_window_adapt = Settings::values.scaling_filter.GetValue(); + switch (current_window_adapt) { + case Settings::ScalingFilter::NearestNeighbor: + window_adapt = MakeNearestNeighbor(device); + break; + case Settings::ScalingFilter::Bicubic: + window_adapt = MakeBicubic(device); + break; + case Settings::ScalingFilter::Gaussian: + window_adapt = MakeGaussian(device); + break; + case Settings::ScalingFilter::ScaleForce: + window_adapt = MakeScaleForce(device); + break; + case Settings::ScalingFilter::Fsr: + case Settings::ScalingFilter::Bilinear: + default: + window_adapt = MakeBilinear(device); + break; + } +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/gl_blit_screen.h b/src/video_core/renderer_opengl/gl_blit_screen.h new file mode 100644 index 000000000..0c3d838f1 --- /dev/null +++ b/src/video_core/renderer_opengl/gl_blit_screen.h @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <list> +#include <memory> +#include <span> + +#include "core/hle/service/nvnflinger/pixel_format.h" +#include "video_core/host1x/gpu_device_memory_manager.h" +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace Layout { +struct FramebufferLayout; +} + +namespace Tegra { +struct FramebufferConfig; +} + +namespace Settings { +enum class ScalingFilter : u32; +} + +namespace OpenGL { + +class Device; +class Layer; +class ProgramManager; +class RasterizerOpenGL; +class StateTracker; +class WindowAdaptPass; + +/// Structure used for storing information about the display target for the Switch screen +struct FramebufferTextureInfo { + GLuint display_texture{}; + u32 width; + u32 height; + u32 scaled_width; + u32 scaled_height; +}; + +class BlitScreen { +public: + explicit BlitScreen(RasterizerOpenGL& rasterizer, + Tegra::MaxwellDeviceMemoryManager& device_memory, + StateTracker& state_tracker, ProgramManager& program_manager, + Device& device); + ~BlitScreen(); + + /// Draws the emulated screens to the emulator window. + void DrawScreen(std::span<const Tegra::FramebufferConfig> framebuffers, + const Layout::FramebufferLayout& layout); + +private: + void CreateWindowAdapt(); + + RasterizerOpenGL& rasterizer; + Tegra::MaxwellDeviceMemoryManager& device_memory; + StateTracker& state_tracker; + ProgramManager& program_manager; + Device& device; + + Settings::ScalingFilter current_window_adapt{}; + std::unique_ptr<WindowAdaptPass> window_adapt; + + std::list<Layer> layers; +}; + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/gl_fsr.cpp b/src/video_core/renderer_opengl/gl_fsr.cpp deleted file mode 100644 index 77262dcf1..000000000 --- a/src/video_core/renderer_opengl/gl_fsr.cpp +++ /dev/null @@ -1,101 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "common/settings.h" -#include "video_core/fsr.h" -#include "video_core/renderer_opengl/gl_fsr.h" -#include "video_core/renderer_opengl/gl_shader_manager.h" -#include "video_core/renderer_opengl/gl_shader_util.h" - -namespace OpenGL { -using namespace FSR; - -using FsrConstants = std::array<u32, 4 * 4>; - -FSR::FSR(std::string_view fsr_vertex_source, std::string_view fsr_easu_source, - std::string_view fsr_rcas_source) - : fsr_vertex{CreateProgram(fsr_vertex_source, GL_VERTEX_SHADER)}, - fsr_easu_frag{CreateProgram(fsr_easu_source, GL_FRAGMENT_SHADER)}, - fsr_rcas_frag{CreateProgram(fsr_rcas_source, GL_FRAGMENT_SHADER)} { - glProgramUniform2f(fsr_vertex.handle, 0, 1.0f, 1.0f); - glProgramUniform2f(fsr_vertex.handle, 1, 0.0f, 0.0f); -} - -FSR::~FSR() = default; - -void FSR::Draw(ProgramManager& program_manager, const Common::Rectangle<u32>& screen, - u32 input_image_width, u32 input_image_height, - const Common::Rectangle<int>& crop_rect) { - - const auto output_image_width = screen.GetWidth(); - const auto output_image_height = screen.GetHeight(); - - if (fsr_intermediate_tex.handle) { - GLint fsr_tex_width, fsr_tex_height; - glGetTextureLevelParameteriv(fsr_intermediate_tex.handle, 0, GL_TEXTURE_WIDTH, - &fsr_tex_width); - glGetTextureLevelParameteriv(fsr_intermediate_tex.handle, 0, GL_TEXTURE_HEIGHT, - &fsr_tex_height); - if (static_cast<u32>(fsr_tex_width) != output_image_width || - static_cast<u32>(fsr_tex_height) != output_image_height) { - fsr_intermediate_tex.Release(); - } - } - if (!fsr_intermediate_tex.handle) { - fsr_intermediate_tex.Create(GL_TEXTURE_2D); - glTextureStorage2D(fsr_intermediate_tex.handle, 1, GL_RGB16F, output_image_width, - output_image_height); - glNamedFramebufferTexture(fsr_framebuffer.handle, GL_COLOR_ATTACHMENT0, - fsr_intermediate_tex.handle, 0); - } - - GLint old_draw_fb; - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &old_draw_fb); - - glFrontFace(GL_CW); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fsr_framebuffer.handle); - glViewportIndexedf(0, 0.0f, 0.0f, static_cast<GLfloat>(output_image_width), - static_cast<GLfloat>(output_image_height)); - - FsrConstants constants; - FsrEasuConOffset( - constants.data() + 0, constants.data() + 4, constants.data() + 8, constants.data() + 12, - - static_cast<f32>(crop_rect.GetWidth()), static_cast<f32>(crop_rect.GetHeight()), - static_cast<f32>(input_image_width), static_cast<f32>(input_image_height), - static_cast<f32>(output_image_width), static_cast<f32>(output_image_height), - static_cast<f32>(crop_rect.left), static_cast<f32>(crop_rect.top)); - - glProgramUniform4uiv(fsr_easu_frag.handle, 0, sizeof(constants), std::data(constants)); - - program_manager.BindPresentPrograms(fsr_vertex.handle, fsr_easu_frag.handle); - glDrawArrays(GL_TRIANGLES, 0, 3); - - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, old_draw_fb); - glBindTextureUnit(0, fsr_intermediate_tex.handle); - - const float sharpening = - static_cast<float>(Settings::values.fsr_sharpening_slider.GetValue()) / 100.0f; - - FsrRcasCon(constants.data(), sharpening); - glProgramUniform4uiv(fsr_rcas_frag.handle, 0, sizeof(constants), std::data(constants)); -} - -void FSR::InitBuffers() { - fsr_framebuffer.Create(); -} - -void FSR::ReleaseBuffers() { - fsr_framebuffer.Release(); - fsr_intermediate_tex.Release(); -} - -const OGLProgram& FSR::GetPresentFragmentProgram() const noexcept { - return fsr_rcas_frag; -} - -bool FSR::AreBuffersInitialized() const noexcept { - return fsr_framebuffer.handle; -} - -} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/gl_fsr.h b/src/video_core/renderer_opengl/gl_fsr.h deleted file mode 100644 index 1f6ae3115..000000000 --- a/src/video_core/renderer_opengl/gl_fsr.h +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include <string_view> - -#include "common/common_types.h" -#include "common/math_util.h" -#include "video_core/fsr.h" -#include "video_core/renderer_opengl/gl_resource_manager.h" - -namespace OpenGL { - -class ProgramManager; - -class FSR { -public: - explicit FSR(std::string_view fsr_vertex_source, std::string_view fsr_easu_source, - std::string_view fsr_rcas_source); - ~FSR(); - - void Draw(ProgramManager& program_manager, const Common::Rectangle<u32>& screen, - u32 input_image_width, u32 input_image_height, - const Common::Rectangle<int>& crop_rect); - - void InitBuffers(); - - void ReleaseBuffers(); - - [[nodiscard]] const OGLProgram& GetPresentFragmentProgram() const noexcept; - - [[nodiscard]] bool AreBuffersInitialized() const noexcept; - -private: - OGLFramebuffer fsr_framebuffer; - OGLProgram fsr_vertex; - OGLProgram fsr_easu_frag; - OGLProgram fsr_rcas_frag; - OGLTexture fsr_intermediate_tex; -}; - -} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index d5354ef2d..b42fb110c 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -71,10 +71,10 @@ std::optional<VideoCore::QueryType> MaxwellToVideoCoreQuery(VideoCommon::QueryTy RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, Tegra::MaxwellDeviceMemoryManager& device_memory_, - const Device& device_, ScreenInfo& screen_info_, - ProgramManager& program_manager_, StateTracker& state_tracker_) - : gpu(gpu_), device_memory(device_memory_), device(device_), screen_info(screen_info_), - program_manager(program_manager_), state_tracker(state_tracker_), + const Device& device_, ProgramManager& program_manager_, + StateTracker& state_tracker_) + : gpu(gpu_), device_memory(device_memory_), device(device_), program_manager(program_manager_), + state_tracker(state_tracker_), texture_cache_runtime(device, program_manager, state_tracker, staging_buffer_pool), texture_cache(texture_cache_runtime, device_memory_), buffer_cache_runtime(device, staging_buffer_pool), @@ -739,27 +739,29 @@ void RasterizerOpenGL::AccelerateInlineToMemory(GPUVAddr address, size_t copy_si query_cache.InvalidateRegion(*cpu_addr, copy_size); } -bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, - DAddr framebuffer_addr, u32 pixel_stride) { +std::optional<FramebufferTextureInfo> RasterizerOpenGL::AccelerateDisplay( + const Tegra::FramebufferConfig& config, DAddr framebuffer_addr, u32 pixel_stride) { if (framebuffer_addr == 0) { - return false; + return {}; } MICROPROFILE_SCOPE(OpenGL_CacheManagement); std::scoped_lock lock{texture_cache.mutex}; - ImageView* const image_view{ - texture_cache.TryFindFramebufferImageView(config, framebuffer_addr)}; + const auto [image_view, scaled] = + texture_cache.TryFindFramebufferImageView(config, framebuffer_addr); if (!image_view) { - return false; + return {}; } - // Verify that the cached surface is the same size and format as the requested framebuffer - // ASSERT_MSG(image_view->size.width == config.width, "Framebuffer width is different"); - // ASSERT_MSG(image_view->size.height == config.height, "Framebuffer height is different"); - screen_info.texture.width = image_view->size.width; - screen_info.texture.height = image_view->size.height; - screen_info.display_texture = image_view->Handle(Shader::TextureType::Color2D); - return true; + const auto& resolution = Settings::values.resolution_info; + + FramebufferTextureInfo info{}; + info.display_texture = image_view->Handle(Shader::TextureType::Color2D); + info.width = image_view->size.width; + info.height = image_view->size.height; + info.scaled_width = scaled ? resolution.ScaleUp(info.width) : info.width; + info.scaled_height = scaled ? resolution.ScaleUp(info.height) : info.height; + return info; } void RasterizerOpenGL::SyncState() { diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 34aa73526..6eae51ff7 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -16,6 +16,7 @@ #include "video_core/engines/maxwell_dma.h" #include "video_core/rasterizer_interface.h" #include "video_core/renderer_opengl/blit_image.h" +#include "video_core/renderer_opengl/gl_blit_screen.h" #include "video_core/renderer_opengl/gl_buffer_cache.h" #include "video_core/renderer_opengl/gl_device.h" #include "video_core/renderer_opengl/gl_fence_manager.h" @@ -37,7 +38,7 @@ class MemoryManager; namespace OpenGL { -struct ScreenInfo; +struct FramebufferTextureInfo; struct ShaderEntries; struct BindlessSSBO { @@ -76,8 +77,8 @@ class RasterizerOpenGL : public VideoCore::RasterizerInterface, public: explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, Tegra::MaxwellDeviceMemoryManager& device_memory_, - const Device& device_, ScreenInfo& screen_info_, - ProgramManager& program_manager_, StateTracker& state_tracker_); + const Device& device_, ProgramManager& program_manager_, + StateTracker& state_tracker_); ~RasterizerOpenGL() override; void Draw(bool is_indexed, u32 instance_count) override; @@ -122,8 +123,6 @@ public: Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, std::span<const u8> memory) override; - bool AccelerateDisplay(const Tegra::FramebufferConfig& config, DAddr framebuffer_addr, - u32 pixel_stride) override; void LoadDiskResources(u64 title_id, std::stop_token stop_loading, const VideoCore::DiskResourceLoadCallback& callback) override; @@ -144,6 +143,10 @@ public: return true; } + std::optional<FramebufferTextureInfo> AccelerateDisplay(const Tegra::FramebufferConfig& config, + VAddr framebuffer_addr, + u32 pixel_stride); + private: static constexpr size_t MAX_TEXTURES = 192; static constexpr size_t MAX_IMAGES = 48; @@ -237,7 +240,6 @@ private: Tegra::MaxwellDeviceMemoryManager& device_memory; const Device& device; - ScreenInfo& screen_info; ProgramManager& program_manager; StateTracker& state_tracker; diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 66a5ca03e..be14494ca 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp @@ -1051,6 +1051,10 @@ void Image::Scale(bool up_scale) { state_tracker.NotifyScissor0(); } +bool Image::IsRescaled() const { + return True(flags & ImageFlagBits::Rescaled); +} + bool Image::ScaleUp(bool ignore) { const auto& resolution = runtime->resolution; if (!resolution.active) { diff --git a/src/video_core/renderer_opengl/gl_texture_cache.h b/src/video_core/renderer_opengl/gl_texture_cache.h index 34870c81f..3e54edcc2 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.h +++ b/src/video_core/renderer_opengl/gl_texture_cache.h @@ -217,6 +217,8 @@ public: return gl_type; } + bool IsRescaled() const; + bool ScaleUp(bool ignore = false); bool ScaleDown(bool ignore = false); diff --git a/src/video_core/renderer_opengl/present/filters.cpp b/src/video_core/renderer_opengl/present/filters.cpp new file mode 100644 index 000000000..819e5d77f --- /dev/null +++ b/src/video_core/renderer_opengl/present/filters.cpp @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "video_core/host_shaders/opengl_present_frag.h" +#include "video_core/host_shaders/opengl_present_scaleforce_frag.h" +#include "video_core/host_shaders/present_bicubic_frag.h" +#include "video_core/host_shaders/present_gaussian_frag.h" +#include "video_core/renderer_opengl/present/filters.h" +#include "video_core/renderer_opengl/present/util.h" + +namespace OpenGL { + +std::unique_ptr<WindowAdaptPass> MakeNearestNeighbor(const Device& device) { + return std::make_unique<WindowAdaptPass>(device, CreateNearestNeighborSampler(), + HostShaders::OPENGL_PRESENT_FRAG); +} + +std::unique_ptr<WindowAdaptPass> MakeBilinear(const Device& device) { + return std::make_unique<WindowAdaptPass>(device, CreateBilinearSampler(), + HostShaders::OPENGL_PRESENT_FRAG); +} + +std::unique_ptr<WindowAdaptPass> MakeBicubic(const Device& device) { + return std::make_unique<WindowAdaptPass>(device, CreateBilinearSampler(), + HostShaders::PRESENT_BICUBIC_FRAG); +} + +std::unique_ptr<WindowAdaptPass> MakeGaussian(const Device& device) { + return std::make_unique<WindowAdaptPass>(device, CreateBilinearSampler(), + HostShaders::PRESENT_GAUSSIAN_FRAG); +} + +std::unique_ptr<WindowAdaptPass> MakeScaleForce(const Device& device) { + return std::make_unique<WindowAdaptPass>( + device, CreateBilinearSampler(), + fmt::format("#version 460\n{}", HostShaders::OPENGL_PRESENT_SCALEFORCE_FRAG)); +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/filters.h b/src/video_core/renderer_opengl/present/filters.h new file mode 100644 index 000000000..122ab7436 --- /dev/null +++ b/src/video_core/renderer_opengl/present/filters.h @@ -0,0 +1,17 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <memory> +#include "video_core/renderer_opengl/present/window_adapt_pass.h" + +namespace OpenGL { + +std::unique_ptr<WindowAdaptPass> MakeNearestNeighbor(const Device& device); +std::unique_ptr<WindowAdaptPass> MakeBilinear(const Device& device); +std::unique_ptr<WindowAdaptPass> MakeBicubic(const Device& device); +std::unique_ptr<WindowAdaptPass> MakeGaussian(const Device& device); +std::unique_ptr<WindowAdaptPass> MakeScaleForce(const Device& device); + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/fsr.cpp b/src/video_core/renderer_opengl/present/fsr.cpp new file mode 100644 index 000000000..b764aadae --- /dev/null +++ b/src/video_core/renderer_opengl/present/fsr.cpp @@ -0,0 +1,98 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/settings.h" +#include "video_core/fsr.h" +#include "video_core/host_shaders/ffx_a_h.h" +#include "video_core/host_shaders/ffx_fsr1_h.h" +#include "video_core/host_shaders/full_screen_triangle_vert.h" +#include "video_core/host_shaders/opengl_fidelityfx_fsr_easu_frag.h" +#include "video_core/host_shaders/opengl_fidelityfx_fsr_frag.h" +#include "video_core/host_shaders/opengl_fidelityfx_fsr_rcas_frag.h" +#include "video_core/renderer_opengl/gl_shader_manager.h" +#include "video_core/renderer_opengl/gl_shader_util.h" +#include "video_core/renderer_opengl/present/fsr.h" +#include "video_core/renderer_opengl/present/util.h" + +namespace OpenGL { +using namespace FSR; + +using FsrConstants = std::array<u32, 4 * 4>; + +FSR::FSR(u32 output_width_, u32 output_height_) : width(output_width_), height(output_height_) { + std::string fsr_source{HostShaders::OPENGL_FIDELITYFX_FSR_FRAG}; + ReplaceInclude(fsr_source, "ffx_a.h", HostShaders::FFX_A_H); + ReplaceInclude(fsr_source, "ffx_fsr1.h", HostShaders::FFX_FSR1_H); + + std::string fsr_easu_source{HostShaders::OPENGL_FIDELITYFX_FSR_EASU_FRAG}; + std::string fsr_rcas_source{HostShaders::OPENGL_FIDELITYFX_FSR_RCAS_FRAG}; + ReplaceInclude(fsr_easu_source, "opengl_fidelityfx_fsr.frag", fsr_source); + ReplaceInclude(fsr_rcas_source, "opengl_fidelityfx_fsr.frag", fsr_source); + + vert = CreateProgram(HostShaders::FULL_SCREEN_TRIANGLE_VERT, GL_VERTEX_SHADER); + easu_frag = CreateProgram(fsr_easu_source, GL_FRAGMENT_SHADER); + rcas_frag = CreateProgram(fsr_rcas_source, GL_FRAGMENT_SHADER); + + glProgramUniform2f(vert.handle, 0, 1.0f, -1.0f); + glProgramUniform2f(vert.handle, 1, 0.0f, 1.0f); + + sampler = CreateBilinearSampler(); + framebuffer.Create(); + + easu_tex.Create(GL_TEXTURE_2D); + glTextureStorage2D(easu_tex.handle, 1, GL_RGBA16F, width, height); + + rcas_tex.Create(GL_TEXTURE_2D); + glTextureStorage2D(rcas_tex.handle, 1, GL_RGBA16F, width, height); +} + +FSR::~FSR() = default; + +GLuint FSR::Draw(ProgramManager& program_manager, GLuint texture, u32 input_image_width, + u32 input_image_height, const Common::Rectangle<f32>& crop_rect) { + const f32 input_width = static_cast<f32>(input_image_width); + const f32 input_height = static_cast<f32>(input_image_height); + const f32 output_width = static_cast<f32>(width); + const f32 output_height = static_cast<f32>(height); + const f32 viewport_width = (crop_rect.right - crop_rect.left) * input_width; + const f32 viewport_x = crop_rect.left * input_width; + const f32 viewport_height = (crop_rect.bottom - crop_rect.top) * input_height; + const f32 viewport_y = crop_rect.top * input_height; + + FsrConstants easu_con{}; + FsrConstants rcas_con{}; + + FsrEasuConOffset(easu_con.data() + 0, easu_con.data() + 4, easu_con.data() + 8, + easu_con.data() + 12, viewport_width, viewport_height, input_width, + input_height, output_width, output_height, viewport_x, viewport_y); + + const float sharpening = + static_cast<float>(Settings::values.fsr_sharpening_slider.GetValue()) / 100.0f; + + FsrRcasCon(rcas_con.data(), sharpening); + + glProgramUniform4uiv(easu_frag.handle, 0, sizeof(easu_con), easu_con.data()); + glProgramUniform4uiv(rcas_frag.handle, 0, sizeof(rcas_con), rcas_con.data()); + + glFrontFace(GL_CW); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer.handle); + glNamedFramebufferTexture(framebuffer.handle, GL_COLOR_ATTACHMENT0, easu_tex.handle, 0); + glViewportIndexedf(0, 0.0f, 0.0f, output_width, output_height); + program_manager.BindPresentPrograms(vert.handle, easu_frag.handle); + glBindTextureUnit(0, texture); + glBindSampler(0, sampler.handle); + glDrawArrays(GL_TRIANGLES, 0, 3); + + glNamedFramebufferTexture(framebuffer.handle, GL_COLOR_ATTACHMENT0, rcas_tex.handle, 0); + program_manager.BindPresentPrograms(vert.handle, rcas_frag.handle); + glBindTextureUnit(0, easu_tex.handle); + glDrawArrays(GL_TRIANGLES, 0, 3); + + return rcas_tex.handle; +} + +bool FSR::NeedsRecreation(const Common::Rectangle<u32>& screen) { + return screen.GetWidth() != width || screen.GetHeight() != height; +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/fsr.h b/src/video_core/renderer_opengl/present/fsr.h new file mode 100644 index 000000000..606935a01 --- /dev/null +++ b/src/video_core/renderer_opengl/present/fsr.h @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <string_view> + +#include "common/common_types.h" +#include "common/math_util.h" +#include "video_core/fsr.h" +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace OpenGL { + +class ProgramManager; + +class FSR { +public: + explicit FSR(u32 output_width, u32 output_height); + ~FSR(); + + GLuint Draw(ProgramManager& program_manager, GLuint texture, u32 input_image_width, + u32 input_image_height, const Common::Rectangle<f32>& crop_rect); + + bool NeedsRecreation(const Common::Rectangle<u32>& screen); + +private: + const u32 width; + const u32 height; + OGLFramebuffer framebuffer; + OGLSampler sampler; + OGLProgram vert; + OGLProgram easu_frag; + OGLProgram rcas_frag; + OGLTexture easu_tex; + OGLTexture rcas_tex; +}; + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/fxaa.cpp b/src/video_core/renderer_opengl/present/fxaa.cpp new file mode 100644 index 000000000..d9b58512d --- /dev/null +++ b/src/video_core/renderer_opengl/present/fxaa.cpp @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "video_core/host_shaders/fxaa_frag.h" +#include "video_core/host_shaders/fxaa_vert.h" +#include "video_core/renderer_opengl/gl_shader_manager.h" +#include "video_core/renderer_opengl/gl_shader_util.h" +#include "video_core/renderer_opengl/present/fxaa.h" +#include "video_core/renderer_opengl/present/util.h" + +namespace OpenGL { + +FXAA::FXAA(u32 width, u32 height) { + vert_shader = CreateProgram(HostShaders::FXAA_VERT, GL_VERTEX_SHADER); + frag_shader = CreateProgram(HostShaders::FXAA_FRAG, GL_FRAGMENT_SHADER); + + sampler = CreateBilinearSampler(); + + framebuffer.Create(); + + texture.Create(GL_TEXTURE_2D); + glTextureStorage2D(texture.handle, 1, GL_RGBA16F, width, height); + glNamedFramebufferTexture(framebuffer.handle, GL_COLOR_ATTACHMENT0, texture.handle, 0); +} + +FXAA::~FXAA() = default; + +GLuint FXAA::Draw(ProgramManager& program_manager, GLuint input_texture) { + glFrontFace(GL_CCW); + + program_manager.BindPresentPrograms(vert_shader.handle, frag_shader.handle); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer.handle); + glBindTextureUnit(0, input_texture); + glBindSampler(0, sampler.handle); + glDrawArrays(GL_TRIANGLES, 0, 3); + glFrontFace(GL_CW); + + return texture.handle; +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/fxaa.h b/src/video_core/renderer_opengl/present/fxaa.h new file mode 100644 index 000000000..b898198f1 --- /dev/null +++ b/src/video_core/renderer_opengl/present/fxaa.h @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace OpenGL { + +class ProgramManager; + +class FXAA { +public: + explicit FXAA(u32 width, u32 height); + ~FXAA(); + + GLuint Draw(ProgramManager& program_manager, GLuint input_texture); + +private: + OGLProgram vert_shader; + OGLProgram frag_shader; + OGLSampler sampler; + OGLFramebuffer framebuffer; + OGLTexture texture; +}; + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/layer.cpp b/src/video_core/renderer_opengl/present/layer.cpp new file mode 100644 index 000000000..8643e07c6 --- /dev/null +++ b/src/video_core/renderer_opengl/present/layer.cpp @@ -0,0 +1,215 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "video_core/framebuffer_config.h" +#include "video_core/renderer_opengl/gl_blit_screen.h" +#include "video_core/renderer_opengl/gl_rasterizer.h" +#include "video_core/renderer_opengl/present/fsr.h" +#include "video_core/renderer_opengl/present/fxaa.h" +#include "video_core/renderer_opengl/present/layer.h" +#include "video_core/renderer_opengl/present/present_uniforms.h" +#include "video_core/renderer_opengl/present/smaa.h" +#include "video_core/surface.h" +#include "video_core/textures/decoders.h" + +namespace OpenGL { + +Layer::Layer(RasterizerOpenGL& rasterizer_, Tegra::MaxwellDeviceMemoryManager& device_memory_) + : rasterizer(rasterizer_), device_memory(device_memory_) { + // Allocate textures for the screen + framebuffer_texture.resource.Create(GL_TEXTURE_2D); + + const GLuint texture = framebuffer_texture.resource.handle; + glTextureStorage2D(texture, 1, GL_RGBA8, 1, 1); + + // Clear screen to black + const u8 framebuffer_data[4] = {0, 0, 0, 0}; + glClearTexImage(framebuffer_texture.resource.handle, 0, GL_RGBA, GL_UNSIGNED_BYTE, + framebuffer_data); +} + +Layer::~Layer() = default; + +GLuint Layer::ConfigureDraw(std::array<GLfloat, 3 * 2>& out_matrix, + std::array<ScreenRectVertex, 4>& out_vertices, + ProgramManager& program_manager, + const Tegra::FramebufferConfig& framebuffer, + const Layout::FramebufferLayout& layout) { + FramebufferTextureInfo info = PrepareRenderTarget(framebuffer); + auto crop = Tegra::NormalizeCrop(framebuffer, info.width, info.height); + GLuint texture = info.display_texture; + + auto anti_aliasing = Settings::values.anti_aliasing.GetValue(); + if (anti_aliasing != Settings::AntiAliasing::None) { + glEnablei(GL_SCISSOR_TEST, 0); + auto viewport_width = Settings::values.resolution_info.ScaleUp(framebuffer_texture.width); + auto viewport_height = Settings::values.resolution_info.ScaleUp(framebuffer_texture.height); + + glScissorIndexed(0, 0, 0, viewport_width, viewport_height); + glViewportIndexedf(0, 0.0f, 0.0f, static_cast<GLfloat>(viewport_width), + static_cast<GLfloat>(viewport_height)); + + switch (anti_aliasing) { + case Settings::AntiAliasing::Fxaa: + CreateFXAA(); + texture = fxaa->Draw(program_manager, info.display_texture); + break; + case Settings::AntiAliasing::Smaa: + default: + CreateSMAA(); + texture = smaa->Draw(program_manager, info.display_texture); + break; + } + } + + glDisablei(GL_SCISSOR_TEST, 0); + + if (Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::Fsr) { + if (!fsr || fsr->NeedsRecreation(layout.screen)) { + fsr = std::make_unique<FSR>(layout.screen.GetWidth(), layout.screen.GetHeight()); + } + + texture = fsr->Draw(program_manager, texture, info.scaled_width, info.scaled_height, crop); + crop = {0, 0, 1, 1}; + } + + out_matrix = + MakeOrthographicMatrix(static_cast<float>(layout.width), static_cast<float>(layout.height)); + + // Map the coordinates to the screen. + const auto& screen = layout.screen; + const auto x = screen.left; + const auto y = screen.top; + const auto w = screen.GetWidth(); + const auto h = screen.GetHeight(); + + out_vertices[0] = ScreenRectVertex(x, y, crop.left, crop.top); + out_vertices[1] = ScreenRectVertex(x + w, y, crop.right, crop.top); + out_vertices[2] = ScreenRectVertex(x, y + h, crop.left, crop.bottom); + out_vertices[3] = ScreenRectVertex(x + w, y + h, crop.right, crop.bottom); + + return texture; +} + +FramebufferTextureInfo Layer::PrepareRenderTarget(const Tegra::FramebufferConfig& framebuffer) { + // If framebuffer is provided, reload it from memory to a texture + if (framebuffer_texture.width != static_cast<GLsizei>(framebuffer.width) || + framebuffer_texture.height != static_cast<GLsizei>(framebuffer.height) || + framebuffer_texture.pixel_format != framebuffer.pixel_format || + gl_framebuffer_data.empty()) { + // Reallocate texture if the framebuffer size has changed. + // This is expected to not happen very often and hence should not be a + // performance problem. + ConfigureFramebufferTexture(framebuffer); + } + + // Load the framebuffer from memory if needed + return LoadFBToScreenInfo(framebuffer); +} + +FramebufferTextureInfo Layer::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer) { + const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset}; + const auto accelerated_info = + rasterizer.AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride); + if (accelerated_info) { + return *accelerated_info; + } + + // Reset the screen info's display texture to its own permanent texture + FramebufferTextureInfo info{}; + info.display_texture = framebuffer_texture.resource.handle; + info.width = framebuffer.width; + info.height = framebuffer.height; + info.scaled_width = framebuffer.width; + info.scaled_height = framebuffer.height; + + // TODO(Rodrigo): Read this from HLE + constexpr u32 block_height_log2 = 4; + const auto pixel_format{ + VideoCore::Surface::PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)}; + const u32 bytes_per_pixel{VideoCore::Surface::BytesPerBlock(pixel_format)}; + const u64 size_in_bytes{Tegra::Texture::CalculateSize( + true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)}; + const u8* const host_ptr{device_memory.GetPointer<u8>(framebuffer_addr)}; + const std::span<const u8> input_data(host_ptr, size_in_bytes); + Tegra::Texture::UnswizzleTexture(gl_framebuffer_data, input_data, bytes_per_pixel, + framebuffer.width, framebuffer.height, 1, block_height_log2, + 0); + + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + glPixelStorei(GL_UNPACK_ROW_LENGTH, static_cast<GLint>(framebuffer.stride)); + + // Update existing texture + // TODO: Test what happens on hardware when you change the framebuffer dimensions so that + // they differ from the LCD resolution. + // TODO: Applications could theoretically crash yuzu here by specifying too large + // framebuffer sizes. We should make sure that this cannot happen. + glTextureSubImage2D(framebuffer_texture.resource.handle, 0, 0, 0, framebuffer.width, + framebuffer.height, framebuffer_texture.gl_format, + framebuffer_texture.gl_type, gl_framebuffer_data.data()); + + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + + return info; +} + +void Layer::ConfigureFramebufferTexture(const Tegra::FramebufferConfig& framebuffer) { + framebuffer_texture.width = framebuffer.width; + framebuffer_texture.height = framebuffer.height; + framebuffer_texture.pixel_format = framebuffer.pixel_format; + + const auto pixel_format{ + VideoCore::Surface::PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)}; + const u32 bytes_per_pixel{VideoCore::Surface::BytesPerBlock(pixel_format)}; + gl_framebuffer_data.resize(framebuffer_texture.width * framebuffer_texture.height * + bytes_per_pixel); + + GLint internal_format; + switch (framebuffer.pixel_format) { + case Service::android::PixelFormat::Rgba8888: + internal_format = GL_RGBA8; + framebuffer_texture.gl_format = GL_RGBA; + framebuffer_texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV; + break; + case Service::android::PixelFormat::Rgb565: + internal_format = GL_RGB565; + framebuffer_texture.gl_format = GL_RGB; + framebuffer_texture.gl_type = GL_UNSIGNED_SHORT_5_6_5; + break; + default: + internal_format = GL_RGBA8; + framebuffer_texture.gl_format = GL_RGBA; + framebuffer_texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV; + // UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}", + // static_cast<u32>(framebuffer.pixel_format)); + break; + } + + framebuffer_texture.resource.Release(); + framebuffer_texture.resource.Create(GL_TEXTURE_2D); + glTextureStorage2D(framebuffer_texture.resource.handle, 1, internal_format, + framebuffer_texture.width, framebuffer_texture.height); + + fxaa.reset(); + smaa.reset(); +} + +void Layer::CreateFXAA() { + smaa.reset(); + if (!fxaa) { + fxaa = std::make_unique<FXAA>( + Settings::values.resolution_info.ScaleUp(framebuffer_texture.width), + Settings::values.resolution_info.ScaleUp(framebuffer_texture.height)); + } +} + +void Layer::CreateSMAA() { + fxaa.reset(); + if (!smaa) { + smaa = std::make_unique<SMAA>( + Settings::values.resolution_info.ScaleUp(framebuffer_texture.width), + Settings::values.resolution_info.ScaleUp(framebuffer_texture.height)); + } +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/layer.h b/src/video_core/renderer_opengl/present/layer.h new file mode 100644 index 000000000..ef1055abf --- /dev/null +++ b/src/video_core/renderer_opengl/present/layer.h @@ -0,0 +1,80 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <memory> +#include <vector> + +#include "video_core/host1x/gpu_device_memory_manager.h" +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace Layout { +struct FramebufferLayout; +} + +namespace Service::android { +enum class PixelFormat : u32; +}; + +namespace Tegra { +struct FramebufferConfig; +} + +namespace OpenGL { + +struct FramebufferTextureInfo; +class FSR; +class FXAA; +class ProgramManager; +class RasterizerOpenGL; +class SMAA; + +/// Structure used for storing information about the textures for the Switch screen +struct TextureInfo { + OGLTexture resource; + GLsizei width; + GLsizei height; + GLenum gl_format; + GLenum gl_type; + Service::android::PixelFormat pixel_format; +}; + +struct ScreenRectVertex; + +class Layer { +public: + explicit Layer(RasterizerOpenGL& rasterizer, Tegra::MaxwellDeviceMemoryManager& device_memory); + ~Layer(); + + GLuint ConfigureDraw(std::array<GLfloat, 3 * 2>& out_matrix, + std::array<ScreenRectVertex, 4>& out_vertices, + ProgramManager& program_manager, + const Tegra::FramebufferConfig& framebuffer, + const Layout::FramebufferLayout& layout); + +private: + /// Loads framebuffer from emulated memory into the active OpenGL texture. + FramebufferTextureInfo LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer); + FramebufferTextureInfo PrepareRenderTarget(const Tegra::FramebufferConfig& framebuffer); + void ConfigureFramebufferTexture(const Tegra::FramebufferConfig& framebuffer); + + void CreateFXAA(); + void CreateSMAA(); + +private: + RasterizerOpenGL& rasterizer; + Tegra::MaxwellDeviceMemoryManager& device_memory; + + /// OpenGL framebuffer data + std::vector<u8> gl_framebuffer_data; + + /// Display information for Switch screen + TextureInfo framebuffer_texture; + + std::unique_ptr<FSR> fsr; + std::unique_ptr<FXAA> fxaa; + std::unique_ptr<SMAA> smaa; +}; + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/present_uniforms.h b/src/video_core/renderer_opengl/present/present_uniforms.h new file mode 100644 index 000000000..3a19f05c7 --- /dev/null +++ b/src/video_core/renderer_opengl/present/present_uniforms.h @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace OpenGL { + +constexpr GLint PositionLocation = 0; +constexpr GLint TexCoordLocation = 1; +constexpr GLint ModelViewMatrixLocation = 0; + +struct ScreenRectVertex { + constexpr ScreenRectVertex() = default; + + constexpr ScreenRectVertex(u32 x, u32 y, GLfloat u, GLfloat v) + : position{{static_cast<GLfloat>(x), static_cast<GLfloat>(y)}}, tex_coord{{u, v}} {} + + std::array<GLfloat, 2> position{}; + std::array<GLfloat, 2> tex_coord{}; +}; + +/** + * Defines a 1:1 pixel orthographic projection matrix with (0,0) on the top-left + * corner and (width, height) on the lower-bottom. + * + * The projection part of the matrix is trivial, hence these operations are represented + * by a 3x2 matrix. + */ +static inline std::array<GLfloat, 3 * 2> MakeOrthographicMatrix(float width, float height) { + std::array<GLfloat, 3 * 2> matrix; // Laid out in column-major order + + // clang-format off + matrix[0] = 2.f / width; matrix[2] = 0.f; matrix[4] = -1.f; + matrix[1] = 0.f; matrix[3] = -2.f / height; matrix[5] = 1.f; + // Last matrix row is implicitly assumed to be [0, 0, 1]. + // clang-format on + + return matrix; +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/smaa.cpp b/src/video_core/renderer_opengl/present/smaa.cpp new file mode 100644 index 000000000..de7f6e502 --- /dev/null +++ b/src/video_core/renderer_opengl/present/smaa.cpp @@ -0,0 +1,102 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "video_core/host_shaders/opengl_smaa_glsl.h" +#include "video_core/host_shaders/smaa_blending_weight_calculation_frag.h" +#include "video_core/host_shaders/smaa_blending_weight_calculation_vert.h" +#include "video_core/host_shaders/smaa_edge_detection_frag.h" +#include "video_core/host_shaders/smaa_edge_detection_vert.h" +#include "video_core/host_shaders/smaa_neighborhood_blending_frag.h" +#include "video_core/host_shaders/smaa_neighborhood_blending_vert.h" +#include "video_core/renderer_opengl/gl_shader_manager.h" +#include "video_core/renderer_opengl/gl_shader_util.h" +#include "video_core/renderer_opengl/present/smaa.h" +#include "video_core/renderer_opengl/present/util.h" +#include "video_core/smaa_area_tex.h" +#include "video_core/smaa_search_tex.h" + +namespace OpenGL { + +SMAA::SMAA(u32 width, u32 height) { + const auto SmaaShader = [&](std::string_view specialized_source, GLenum stage) { + std::string shader_source{specialized_source}; + ReplaceInclude(shader_source, "opengl_smaa.glsl", HostShaders::OPENGL_SMAA_GLSL); + return CreateProgram(shader_source, stage); + }; + + edge_detection_vert = SmaaShader(HostShaders::SMAA_EDGE_DETECTION_VERT, GL_VERTEX_SHADER); + edge_detection_frag = SmaaShader(HostShaders::SMAA_EDGE_DETECTION_FRAG, GL_FRAGMENT_SHADER); + blending_weight_calculation_vert = + SmaaShader(HostShaders::SMAA_BLENDING_WEIGHT_CALCULATION_VERT, GL_VERTEX_SHADER); + blending_weight_calculation_frag = + SmaaShader(HostShaders::SMAA_BLENDING_WEIGHT_CALCULATION_FRAG, GL_FRAGMENT_SHADER); + neighborhood_blending_vert = + SmaaShader(HostShaders::SMAA_NEIGHBORHOOD_BLENDING_VERT, GL_VERTEX_SHADER); + neighborhood_blending_frag = + SmaaShader(HostShaders::SMAA_NEIGHBORHOOD_BLENDING_FRAG, GL_FRAGMENT_SHADER); + + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + + area_tex.Create(GL_TEXTURE_2D); + glTextureStorage2D(area_tex.handle, 1, GL_RG8, AREATEX_WIDTH, AREATEX_HEIGHT); + glTextureSubImage2D(area_tex.handle, 0, 0, 0, AREATEX_WIDTH, AREATEX_HEIGHT, GL_RG, + GL_UNSIGNED_BYTE, areaTexBytes); + search_tex.Create(GL_TEXTURE_2D); + glTextureStorage2D(search_tex.handle, 1, GL_R8, SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT); + glTextureSubImage2D(search_tex.handle, 0, 0, 0, SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT, GL_RED, + GL_UNSIGNED_BYTE, searchTexBytes); + + edges_tex.Create(GL_TEXTURE_2D); + glTextureStorage2D(edges_tex.handle, 1, GL_RG16F, width, height); + + blend_tex.Create(GL_TEXTURE_2D); + glTextureStorage2D(blend_tex.handle, 1, GL_RGBA16F, width, height); + + sampler = CreateBilinearSampler(); + + framebuffer.Create(); + + texture.Create(GL_TEXTURE_2D); + glTextureStorage2D(texture.handle, 1, GL_RGBA16F, width, height); + glNamedFramebufferTexture(framebuffer.handle, GL_COLOR_ATTACHMENT0, texture.handle, 0); +} + +SMAA::~SMAA() = default; + +GLuint SMAA::Draw(ProgramManager& program_manager, GLuint input_texture) { + glClearColor(0, 0, 0, 0); + glFrontFace(GL_CCW); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer.handle); + glBindSampler(0, sampler.handle); + glBindSampler(1, sampler.handle); + glBindSampler(2, sampler.handle); + + glBindTextureUnit(0, input_texture); + glNamedFramebufferTexture(framebuffer.handle, GL_COLOR_ATTACHMENT0, edges_tex.handle, 0); + glClear(GL_COLOR_BUFFER_BIT); + program_manager.BindPresentPrograms(edge_detection_vert.handle, edge_detection_frag.handle); + glDrawArrays(GL_TRIANGLES, 0, 3); + + glBindTextureUnit(0, edges_tex.handle); + glBindTextureUnit(1, area_tex.handle); + glBindTextureUnit(2, search_tex.handle); + glNamedFramebufferTexture(framebuffer.handle, GL_COLOR_ATTACHMENT0, blend_tex.handle, 0); + glClear(GL_COLOR_BUFFER_BIT); + program_manager.BindPresentPrograms(blending_weight_calculation_vert.handle, + blending_weight_calculation_frag.handle); + glDrawArrays(GL_TRIANGLES, 0, 3); + + glBindTextureUnit(0, input_texture); + glBindTextureUnit(1, blend_tex.handle); + glNamedFramebufferTexture(framebuffer.handle, GL_COLOR_ATTACHMENT0, texture.handle, 0); + program_manager.BindPresentPrograms(neighborhood_blending_vert.handle, + neighborhood_blending_frag.handle); + glClear(GL_COLOR_BUFFER_BIT); + glDrawArrays(GL_TRIANGLES, 0, 3); + glFrontFace(GL_CW); + + return texture.handle; +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/smaa.h b/src/video_core/renderer_opengl/present/smaa.h new file mode 100644 index 000000000..a48cb4fa9 --- /dev/null +++ b/src/video_core/renderer_opengl/present/smaa.h @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace OpenGL { + +class ProgramManager; + +class SMAA { +public: + explicit SMAA(u32 width, u32 height); + ~SMAA(); + + GLuint Draw(ProgramManager& program_manager, GLuint input_texture); + +private: + OGLProgram edge_detection_vert; + OGLProgram blending_weight_calculation_vert; + OGLProgram neighborhood_blending_vert; + OGLProgram edge_detection_frag; + OGLProgram blending_weight_calculation_frag; + OGLProgram neighborhood_blending_frag; + OGLTexture area_tex; + OGLTexture search_tex; + OGLTexture edges_tex; + OGLTexture blend_tex; + OGLSampler sampler; + OGLFramebuffer framebuffer; + OGLTexture texture; +}; + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/util.h b/src/video_core/renderer_opengl/present/util.h new file mode 100644 index 000000000..67f03aa27 --- /dev/null +++ b/src/video_core/renderer_opengl/present/util.h @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <string> + +#include "common/assert.h" +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace OpenGL { + +static inline void ReplaceInclude(std::string& shader_source, std::string_view include_name, + std::string_view include_content) { + const std::string include_string = fmt::format("#include \"{}\"", include_name); + const std::size_t pos = shader_source.find(include_string); + ASSERT(pos != std::string::npos); + shader_source.replace(pos, include_string.size(), include_content); +}; + +static inline OGLSampler CreateBilinearSampler() { + OGLSampler sampler; + sampler.Create(); + glSamplerParameteri(sampler.handle, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glSamplerParameteri(sampler.handle, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glSamplerParameteri(sampler.handle, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glSamplerParameteri(sampler.handle, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glSamplerParameteri(sampler.handle, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + return sampler; +} + +static inline OGLSampler CreateNearestNeighborSampler() { + OGLSampler sampler; + sampler.Create(); + glSamplerParameteri(sampler.handle, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glSamplerParameteri(sampler.handle, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glSamplerParameteri(sampler.handle, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glSamplerParameteri(sampler.handle, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glSamplerParameteri(sampler.handle, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + return sampler; +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/window_adapt_pass.cpp b/src/video_core/renderer_opengl/present/window_adapt_pass.cpp new file mode 100644 index 000000000..4d681606b --- /dev/null +++ b/src/video_core/renderer_opengl/present/window_adapt_pass.cpp @@ -0,0 +1,103 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/settings.h" +#include "video_core/framebuffer_config.h" +#include "video_core/host_shaders/opengl_present_vert.h" +#include "video_core/renderer_opengl/gl_device.h" +#include "video_core/renderer_opengl/gl_shader_manager.h" +#include "video_core/renderer_opengl/gl_shader_util.h" +#include "video_core/renderer_opengl/present/layer.h" +#include "video_core/renderer_opengl/present/present_uniforms.h" +#include "video_core/renderer_opengl/present/window_adapt_pass.h" + +namespace OpenGL { + +WindowAdaptPass::WindowAdaptPass(const Device& device_, OGLSampler&& sampler_, + std::string_view frag_source) + : device(device_), sampler(std::move(sampler_)) { + vert = CreateProgram(HostShaders::OPENGL_PRESENT_VERT, GL_VERTEX_SHADER); + frag = CreateProgram(frag_source, GL_FRAGMENT_SHADER); + + // Generate VBO handle for drawing + vertex_buffer.Create(); + + // Attach vertex data to VAO + glNamedBufferData(vertex_buffer.handle, sizeof(ScreenRectVertex) * 4, nullptr, GL_STREAM_DRAW); + + // Query vertex buffer address when the driver supports unified vertex attributes + if (device.HasVertexBufferUnifiedMemory()) { + glMakeNamedBufferResidentNV(vertex_buffer.handle, GL_READ_ONLY); + glGetNamedBufferParameterui64vNV(vertex_buffer.handle, GL_BUFFER_GPU_ADDRESS_NV, + &vertex_buffer_address); + } +} + +WindowAdaptPass::~WindowAdaptPass() = default; + +void WindowAdaptPass::DrawToFramebuffer(ProgramManager& program_manager, std::list<Layer>& layers, + std::span<const Tegra::FramebufferConfig> framebuffers, + const Layout::FramebufferLayout& layout) { + GLint old_read_fb; + GLint old_draw_fb; + glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &old_read_fb); + glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &old_draw_fb); + + const size_t layer_count = framebuffers.size(); + std::vector<GLuint> textures(layer_count); + std::vector<std::array<GLfloat, 3 * 2>> matrices(layer_count); + std::vector<std::array<ScreenRectVertex, 4>> vertices(layer_count); + + auto layer_it = layers.begin(); + for (size_t i = 0; i < layer_count; i++) { + textures[i] = layer_it->ConfigureDraw(matrices[i], vertices[i], program_manager, + framebuffers[i], layout); + layer_it++; + } + + glBindFramebuffer(GL_READ_FRAMEBUFFER, old_read_fb); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, old_draw_fb); + + program_manager.BindPresentPrograms(vert.handle, frag.handle); + + glDisable(GL_FRAMEBUFFER_SRGB); + glViewportIndexedf(0, 0.0f, 0.0f, static_cast<GLfloat>(layout.width), + static_cast<GLfloat>(layout.height)); + + glEnableVertexAttribArray(PositionLocation); + glEnableVertexAttribArray(TexCoordLocation); + glVertexAttribDivisor(PositionLocation, 0); + glVertexAttribDivisor(TexCoordLocation, 0); + glVertexAttribFormat(PositionLocation, 2, GL_FLOAT, GL_FALSE, + offsetof(ScreenRectVertex, position)); + glVertexAttribFormat(TexCoordLocation, 2, GL_FLOAT, GL_FALSE, + offsetof(ScreenRectVertex, tex_coord)); + glVertexAttribBinding(PositionLocation, 0); + glVertexAttribBinding(TexCoordLocation, 0); + if (device.HasVertexBufferUnifiedMemory()) { + glBindVertexBuffer(0, 0, 0, sizeof(ScreenRectVertex)); + glBufferAddressRangeNV(GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV, 0, vertex_buffer_address, + sizeof(decltype(vertices)::value_type)); + } else { + glBindVertexBuffer(0, vertex_buffer.handle, 0, sizeof(ScreenRectVertex)); + } + + glBindSampler(0, sampler.handle); + + // Update background color before drawing + glClearColor(Settings::values.bg_red.GetValue() / 255.0f, + Settings::values.bg_green.GetValue() / 255.0f, + Settings::values.bg_blue.GetValue() / 255.0f, 1.0f); + + glClear(GL_COLOR_BUFFER_BIT); + + for (size_t i = 0; i < layer_count; i++) { + glBindTextureUnit(0, textures[i]); + glProgramUniformMatrix3x2fv(vert.handle, ModelViewMatrixLocation, 1, GL_FALSE, + matrices[i].data()); + glNamedBufferSubData(vertex_buffer.handle, 0, sizeof(vertices[i]), std::data(vertices[i])); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + } +} + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/present/window_adapt_pass.h b/src/video_core/renderer_opengl/present/window_adapt_pass.h new file mode 100644 index 000000000..00975a9c6 --- /dev/null +++ b/src/video_core/renderer_opengl/present/window_adapt_pass.h @@ -0,0 +1,47 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <list> +#include <span> + +#include "common/math_util.h" +#include "video_core/renderer_opengl/gl_resource_manager.h" + +namespace Layout { +struct FramebufferLayout; +} + +namespace Tegra { +struct FramebufferConfig; +} + +namespace OpenGL { + +class Device; +class Layer; +class ProgramManager; + +class WindowAdaptPass final { +public: + explicit WindowAdaptPass(const Device& device, OGLSampler&& sampler, + std::string_view frag_source); + ~WindowAdaptPass(); + + void DrawToFramebuffer(ProgramManager& program_manager, std::list<Layer>& layers, + std::span<const Tegra::FramebufferConfig> framebuffers, + const Layout::FramebufferLayout& layout); + +private: + const Device& device; + OGLSampler sampler; + OGLProgram vert; + OGLProgram frag; + OGLBuffer vertex_buffer; + + // GPU address of the vertex buffer + GLuint64EXT vertex_buffer_address = 0; +}; + +} // namespace OpenGL diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index b75376fdb..e33a32592 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -16,68 +16,15 @@ #include "core/core_timing.h" #include "core/frontend/emu_window.h" #include "core/telemetry_session.h" -#include "video_core/host_shaders/ffx_a_h.h" -#include "video_core/host_shaders/ffx_fsr1_h.h" -#include "video_core/host_shaders/full_screen_triangle_vert.h" -#include "video_core/host_shaders/fxaa_frag.h" -#include "video_core/host_shaders/fxaa_vert.h" -#include "video_core/host_shaders/opengl_fidelityfx_fsr_easu_frag.h" -#include "video_core/host_shaders/opengl_fidelityfx_fsr_frag.h" -#include "video_core/host_shaders/opengl_fidelityfx_fsr_rcas_frag.h" -#include "video_core/host_shaders/opengl_present_frag.h" -#include "video_core/host_shaders/opengl_present_scaleforce_frag.h" -#include "video_core/host_shaders/opengl_present_vert.h" -#include "video_core/host_shaders/opengl_smaa_glsl.h" -#include "video_core/host_shaders/present_bicubic_frag.h" -#include "video_core/host_shaders/present_gaussian_frag.h" -#include "video_core/host_shaders/smaa_blending_weight_calculation_frag.h" -#include "video_core/host_shaders/smaa_blending_weight_calculation_vert.h" -#include "video_core/host_shaders/smaa_edge_detection_frag.h" -#include "video_core/host_shaders/smaa_edge_detection_vert.h" -#include "video_core/host_shaders/smaa_neighborhood_blending_frag.h" -#include "video_core/host_shaders/smaa_neighborhood_blending_vert.h" -#include "video_core/renderer_opengl/gl_fsr.h" +#include "video_core/renderer_opengl/gl_blit_screen.h" #include "video_core/renderer_opengl/gl_rasterizer.h" #include "video_core/renderer_opengl/gl_shader_manager.h" #include "video_core/renderer_opengl/gl_shader_util.h" #include "video_core/renderer_opengl/renderer_opengl.h" -#include "video_core/smaa_area_tex.h" -#include "video_core/smaa_search_tex.h" #include "video_core/textures/decoders.h" namespace OpenGL { namespace { -constexpr GLint PositionLocation = 0; -constexpr GLint TexCoordLocation = 1; -constexpr GLint ModelViewMatrixLocation = 0; - -struct ScreenRectVertex { - constexpr ScreenRectVertex(u32 x, u32 y, GLfloat u, GLfloat v) - : position{{static_cast<GLfloat>(x), static_cast<GLfloat>(y)}}, tex_coord{{u, v}} {} - - std::array<GLfloat, 2> position; - std::array<GLfloat, 2> tex_coord; -}; - -/** - * Defines a 1:1 pixel ortographic projection matrix with (0,0) on the top-left - * corner and (width, height) on the lower-bottom. - * - * The projection part of the matrix is trivial, hence these operations are represented - * by a 3x2 matrix. - */ -std::array<GLfloat, 3 * 2> MakeOrthographicMatrix(float width, float height) { - std::array<GLfloat, 3 * 2> matrix; // Laid out in column-major order - - // clang-format off - matrix[0] = 2.f / width; matrix[2] = 0.f; matrix[4] = -1.f; - matrix[1] = 0.f; matrix[3] = -2.f / height; matrix[5] = 1.f; - // Last matrix row is implicitly assumed to be [0, 0, 1]. - // clang-format on - - return matrix; -} - const char* GetSource(GLenum source) { switch (source) { case GL_DEBUG_SOURCE_API: @@ -148,15 +95,13 @@ RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_, : RendererBase{emu_window_, std::move(context_)}, telemetry_session{telemetry_session_}, emu_window{emu_window_}, device_memory{device_memory_}, gpu{gpu_}, device{emu_window_}, state_tracker{}, program_manager{device}, - rasterizer(emu_window, gpu, device_memory, device, screen_info, program_manager, - state_tracker) { + rasterizer(emu_window, gpu, device_memory, device, program_manager, state_tracker) { if (Settings::values.renderer_debug && GLAD_GL_KHR_debug) { glEnable(GL_DEBUG_OUTPUT); glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); glDebugMessageCallback(DebugHandler, nullptr); } AddTelemetryFields(); - InitOpenGLObjects(); // Initialize default attributes to match hardware's disabled attributes GLint max_attribs{}; @@ -168,27 +113,27 @@ RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_, if (!GLAD_GL_ARB_seamless_cubemap_per_texture && !GLAD_GL_AMD_seamless_cubemap_per_texture) { glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); } - // Enable unified vertex attributes and query vertex buffer address when the driver supports it + + // Enable unified vertex attributes when the driver supports it if (device.HasVertexBufferUnifiedMemory()) { glEnableClientState(GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV); glEnableClientState(GL_ELEMENT_ARRAY_UNIFIED_NV); - glMakeNamedBufferResidentNV(vertex_buffer.handle, GL_READ_ONLY); - glGetNamedBufferParameterui64vNV(vertex_buffer.handle, GL_BUFFER_GPU_ADDRESS_NV, - &vertex_buffer_address); } + blit_screen = std::make_unique<BlitScreen>(rasterizer, device_memory, state_tracker, + program_manager, device); } RendererOpenGL::~RendererOpenGL() = default; -void RendererOpenGL::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { - if (!framebuffer) { +void RendererOpenGL::Composite(std::span<const Tegra::FramebufferConfig> framebuffers) { + if (framebuffers.empty()) { return; } - PrepareRendertarget(framebuffer); - RenderScreenshot(); + + RenderScreenshot(framebuffers); state_tracker.BindFramebuffer(0); - DrawScreen(emu_window.GetFramebufferLayout()); + blit_screen->DrawScreen(framebuffers, emu_window.GetFramebufferLayout()); ++m_current_frame; @@ -199,172 +144,6 @@ void RendererOpenGL::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { render_window.OnFrameDisplayed(); } -void RendererOpenGL::PrepareRendertarget(const Tegra::FramebufferConfig* framebuffer) { - if (!framebuffer) { - return; - } - // If framebuffer is provided, reload it from memory to a texture - if (screen_info.texture.width != static_cast<GLsizei>(framebuffer->width) || - screen_info.texture.height != static_cast<GLsizei>(framebuffer->height) || - screen_info.texture.pixel_format != framebuffer->pixel_format || - gl_framebuffer_data.empty()) { - // Reallocate texture if the framebuffer size has changed. - // This is expected to not happen very often and hence should not be a - // performance problem. - ConfigureFramebufferTexture(screen_info.texture, *framebuffer); - } - - // Load the framebuffer from memory, draw it to the screen, and swap buffers - LoadFBToScreenInfo(*framebuffer); -} - -void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer) { - // Framebuffer orientation handling - framebuffer_transform_flags = framebuffer.transform_flags; - framebuffer_crop_rect = framebuffer.crop_rect; - framebuffer_width = framebuffer.width; - framebuffer_height = framebuffer.height; - - const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset}; - screen_info.was_accelerated = - rasterizer.AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride); - if (screen_info.was_accelerated) { - return; - } - - // Reset the screen info's display texture to its own permanent texture - screen_info.display_texture = screen_info.texture.resource.handle; - - // TODO(Rodrigo): Read this from HLE - constexpr u32 block_height_log2 = 4; - const auto pixel_format{ - VideoCore::Surface::PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)}; - const u32 bytes_per_pixel{VideoCore::Surface::BytesPerBlock(pixel_format)}; - const u64 size_in_bytes{Tegra::Texture::CalculateSize( - true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)}; - const u8* const host_ptr{device_memory.GetPointer<u8>(framebuffer_addr)}; - const std::span<const u8> input_data(host_ptr, size_in_bytes); - Tegra::Texture::UnswizzleTexture(gl_framebuffer_data, input_data, bytes_per_pixel, - framebuffer.width, framebuffer.height, 1, block_height_log2, - 0); - - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glPixelStorei(GL_UNPACK_ROW_LENGTH, static_cast<GLint>(framebuffer.stride)); - - // Update existing texture - // TODO: Test what happens on hardware when you change the framebuffer dimensions so that - // they differ from the LCD resolution. - // TODO: Applications could theoretically crash yuzu here by specifying too large - // framebuffer sizes. We should make sure that this cannot happen. - glTextureSubImage2D(screen_info.texture.resource.handle, 0, 0, 0, framebuffer.width, - framebuffer.height, screen_info.texture.gl_format, - screen_info.texture.gl_type, gl_framebuffer_data.data()); - - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); -} - -void RendererOpenGL::LoadColorToActiveGLTexture(u8 color_r, u8 color_g, u8 color_b, u8 color_a, - const TextureInfo& texture) { - const u8 framebuffer_data[4] = {color_a, color_b, color_g, color_r}; - glClearTexImage(texture.resource.handle, 0, GL_RGBA, GL_UNSIGNED_BYTE, framebuffer_data); -} - -void RendererOpenGL::InitOpenGLObjects() { - // Create shader programs - fxaa_vertex = CreateProgram(HostShaders::FXAA_VERT, GL_VERTEX_SHADER); - fxaa_fragment = CreateProgram(HostShaders::FXAA_FRAG, GL_FRAGMENT_SHADER); - - const auto replace_include = [](std::string& shader_source, std::string_view include_name, - std::string_view include_content) { - const std::string include_string = fmt::format("#include \"{}\"", include_name); - const std::size_t pos = shader_source.find(include_string); - ASSERT(pos != std::string::npos); - shader_source.replace(pos, include_string.size(), include_content); - }; - - const auto SmaaShader = [&](std::string_view specialized_source, GLenum stage) { - std::string shader_source{specialized_source}; - replace_include(shader_source, "opengl_smaa.glsl", HostShaders::OPENGL_SMAA_GLSL); - return CreateProgram(shader_source, stage); - }; - - smaa_edge_detection_vert = SmaaShader(HostShaders::SMAA_EDGE_DETECTION_VERT, GL_VERTEX_SHADER); - smaa_edge_detection_frag = - SmaaShader(HostShaders::SMAA_EDGE_DETECTION_FRAG, GL_FRAGMENT_SHADER); - smaa_blending_weight_calculation_vert = - SmaaShader(HostShaders::SMAA_BLENDING_WEIGHT_CALCULATION_VERT, GL_VERTEX_SHADER); - smaa_blending_weight_calculation_frag = - SmaaShader(HostShaders::SMAA_BLENDING_WEIGHT_CALCULATION_FRAG, GL_FRAGMENT_SHADER); - smaa_neighborhood_blending_vert = - SmaaShader(HostShaders::SMAA_NEIGHBORHOOD_BLENDING_VERT, GL_VERTEX_SHADER); - smaa_neighborhood_blending_frag = - SmaaShader(HostShaders::SMAA_NEIGHBORHOOD_BLENDING_FRAG, GL_FRAGMENT_SHADER); - - present_vertex = CreateProgram(HostShaders::OPENGL_PRESENT_VERT, GL_VERTEX_SHADER); - present_bilinear_fragment = CreateProgram(HostShaders::OPENGL_PRESENT_FRAG, GL_FRAGMENT_SHADER); - present_bicubic_fragment = CreateProgram(HostShaders::PRESENT_BICUBIC_FRAG, GL_FRAGMENT_SHADER); - present_gaussian_fragment = - CreateProgram(HostShaders::PRESENT_GAUSSIAN_FRAG, GL_FRAGMENT_SHADER); - present_scaleforce_fragment = - CreateProgram(fmt::format("#version 460\n{}", HostShaders::OPENGL_PRESENT_SCALEFORCE_FRAG), - GL_FRAGMENT_SHADER); - - std::string fsr_source{HostShaders::OPENGL_FIDELITYFX_FSR_FRAG}; - replace_include(fsr_source, "ffx_a.h", HostShaders::FFX_A_H); - replace_include(fsr_source, "ffx_fsr1.h", HostShaders::FFX_FSR1_H); - - std::string fsr_easu_frag_source{HostShaders::OPENGL_FIDELITYFX_FSR_EASU_FRAG}; - std::string fsr_rcas_frag_source{HostShaders::OPENGL_FIDELITYFX_FSR_RCAS_FRAG}; - replace_include(fsr_easu_frag_source, "opengl_fidelityfx_fsr.frag", fsr_source); - replace_include(fsr_rcas_frag_source, "opengl_fidelityfx_fsr.frag", fsr_source); - - fsr = std::make_unique<FSR>(HostShaders::FULL_SCREEN_TRIANGLE_VERT, fsr_easu_frag_source, - fsr_rcas_frag_source); - - // Generate presentation sampler - present_sampler.Create(); - glSamplerParameteri(present_sampler.handle, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glSamplerParameteri(present_sampler.handle, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glSamplerParameteri(present_sampler.handle, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glSamplerParameteri(present_sampler.handle, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glSamplerParameteri(present_sampler.handle, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - - present_sampler_nn.Create(); - glSamplerParameteri(present_sampler_nn.handle, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glSamplerParameteri(present_sampler_nn.handle, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glSamplerParameteri(present_sampler_nn.handle, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glSamplerParameteri(present_sampler_nn.handle, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glSamplerParameteri(present_sampler_nn.handle, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - - // Generate VBO handle for drawing - vertex_buffer.Create(); - - // Attach vertex data to VAO - glNamedBufferData(vertex_buffer.handle, sizeof(ScreenRectVertex) * 4, nullptr, GL_STREAM_DRAW); - - // Allocate textures for the screen - screen_info.texture.resource.Create(GL_TEXTURE_2D); - - const GLuint texture = screen_info.texture.resource.handle; - glTextureStorage2D(texture, 1, GL_RGBA8, 1, 1); - - screen_info.display_texture = screen_info.texture.resource.handle; - - // Clear screen to black - LoadColorToActiveGLTexture(0, 0, 0, 0, screen_info.texture); - - aa_framebuffer.Create(); - - smaa_area_tex.Create(GL_TEXTURE_2D); - glTextureStorage2D(smaa_area_tex.handle, 1, GL_RG8, AREATEX_WIDTH, AREATEX_HEIGHT); - glTextureSubImage2D(smaa_area_tex.handle, 0, 0, 0, AREATEX_WIDTH, AREATEX_HEIGHT, GL_RG, - GL_UNSIGNED_BYTE, areaTexBytes); - smaa_search_tex.Create(GL_TEXTURE_2D); - glTextureStorage2D(smaa_search_tex.handle, 1, GL_R8, SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT); - glTextureSubImage2D(smaa_search_tex.handle, 0, 0, 0, SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT, GL_RED, - GL_UNSIGNED_BYTE, searchTexBytes); -} - void RendererOpenGL::AddTelemetryFields() { const char* const gl_version{reinterpret_cast<char const*>(glGetString(GL_VERSION))}; const char* const gpu_vendor{reinterpret_cast<char const*>(glGetString(GL_VENDOR))}; @@ -380,328 +159,7 @@ void RendererOpenGL::AddTelemetryFields() { telemetry_session.AddField(user_system, "GPU_OpenGL_Version", std::string(gl_version)); } -void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture, - const Tegra::FramebufferConfig& framebuffer) { - texture.width = framebuffer.width; - texture.height = framebuffer.height; - texture.pixel_format = framebuffer.pixel_format; - - const auto pixel_format{ - VideoCore::Surface::PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)}; - const u32 bytes_per_pixel{VideoCore::Surface::BytesPerBlock(pixel_format)}; - gl_framebuffer_data.resize(texture.width * texture.height * bytes_per_pixel); - - GLint internal_format; - switch (framebuffer.pixel_format) { - case Service::android::PixelFormat::Rgba8888: - internal_format = GL_RGBA8; - texture.gl_format = GL_RGBA; - texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - case Service::android::PixelFormat::Rgb565: - internal_format = GL_RGB565; - texture.gl_format = GL_RGB; - texture.gl_type = GL_UNSIGNED_SHORT_5_6_5; - break; - default: - internal_format = GL_RGBA8; - texture.gl_format = GL_RGBA; - texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV; - // UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}", - // static_cast<u32>(framebuffer.pixel_format)); - break; - } - - texture.resource.Release(); - texture.resource.Create(GL_TEXTURE_2D); - glTextureStorage2D(texture.resource.handle, 1, internal_format, texture.width, texture.height); - aa_texture.Release(); - aa_texture.Create(GL_TEXTURE_2D); - glTextureStorage2D(aa_texture.handle, 1, GL_RGBA16F, - Settings::values.resolution_info.ScaleUp(screen_info.texture.width), - Settings::values.resolution_info.ScaleUp(screen_info.texture.height)); - glNamedFramebufferTexture(aa_framebuffer.handle, GL_COLOR_ATTACHMENT0, aa_texture.handle, 0); - smaa_edges_tex.Release(); - smaa_edges_tex.Create(GL_TEXTURE_2D); - glTextureStorage2D(smaa_edges_tex.handle, 1, GL_RG16F, - Settings::values.resolution_info.ScaleUp(screen_info.texture.width), - Settings::values.resolution_info.ScaleUp(screen_info.texture.height)); - smaa_blend_tex.Release(); - smaa_blend_tex.Create(GL_TEXTURE_2D); - glTextureStorage2D(smaa_blend_tex.handle, 1, GL_RGBA16F, - Settings::values.resolution_info.ScaleUp(screen_info.texture.width), - Settings::values.resolution_info.ScaleUp(screen_info.texture.height)); -} - -void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) { - // TODO: Signal state tracker about these changes - state_tracker.NotifyScreenDrawVertexArray(); - state_tracker.NotifyPolygonModes(); - state_tracker.NotifyViewport0(); - state_tracker.NotifyScissor0(); - state_tracker.NotifyColorMask(0); - state_tracker.NotifyBlend0(); - state_tracker.NotifyFramebuffer(); - state_tracker.NotifyFrontFace(); - state_tracker.NotifyCullTest(); - state_tracker.NotifyDepthTest(); - state_tracker.NotifyStencilTest(); - state_tracker.NotifyPolygonOffset(); - state_tracker.NotifyRasterizeEnable(); - state_tracker.NotifyFramebufferSRGB(); - state_tracker.NotifyLogicOp(); - state_tracker.NotifyClipControl(); - state_tracker.NotifyAlphaTest(); - - state_tracker.ClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); - - glEnable(GL_CULL_FACE); - glDisable(GL_COLOR_LOGIC_OP); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - glDisable(GL_POLYGON_OFFSET_FILL); - glDisable(GL_RASTERIZER_DISCARD); - glDisable(GL_ALPHA_TEST); - glDisablei(GL_BLEND, 0); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glCullFace(GL_BACK); - glFrontFace(GL_CW); - glColorMaski(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glDepthRangeIndexed(0, 0.0, 0.0); - - glBindTextureUnit(0, screen_info.display_texture); - - auto anti_aliasing = Settings::values.anti_aliasing.GetValue(); - if (anti_aliasing >= Settings::AntiAliasing::MaxEnum) { - LOG_ERROR(Render_OpenGL, "Invalid antialiasing option selected {}", anti_aliasing); - anti_aliasing = Settings::AntiAliasing::None; - Settings::values.anti_aliasing.SetValue(anti_aliasing); - } - - if (anti_aliasing != Settings::AntiAliasing::None) { - glEnablei(GL_SCISSOR_TEST, 0); - auto viewport_width = screen_info.texture.width; - auto scissor_width = framebuffer_crop_rect.GetWidth(); - if (scissor_width <= 0) { - scissor_width = viewport_width; - } - auto viewport_height = screen_info.texture.height; - auto scissor_height = framebuffer_crop_rect.GetHeight(); - if (scissor_height <= 0) { - scissor_height = viewport_height; - } - if (screen_info.was_accelerated) { - viewport_width = Settings::values.resolution_info.ScaleUp(viewport_width); - scissor_width = Settings::values.resolution_info.ScaleUp(scissor_width); - viewport_height = Settings::values.resolution_info.ScaleUp(viewport_height); - scissor_height = Settings::values.resolution_info.ScaleUp(scissor_height); - } - glScissorIndexed(0, 0, 0, scissor_width, scissor_height); - glViewportIndexedf(0, 0.0f, 0.0f, static_cast<GLfloat>(viewport_width), - static_cast<GLfloat>(viewport_height)); - - glBindSampler(0, present_sampler.handle); - GLint old_read_fb; - GLint old_draw_fb; - glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &old_read_fb); - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &old_draw_fb); - - switch (anti_aliasing) { - case Settings::AntiAliasing::Fxaa: { - program_manager.BindPresentPrograms(fxaa_vertex.handle, fxaa_fragment.handle); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, aa_framebuffer.handle); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - } break; - case Settings::AntiAliasing::Smaa: { - glClearColor(0, 0, 0, 0); - glFrontFace(GL_CCW); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, aa_framebuffer.handle); - glBindSampler(1, present_sampler.handle); - glBindSampler(2, present_sampler.handle); - - glNamedFramebufferTexture(aa_framebuffer.handle, GL_COLOR_ATTACHMENT0, - smaa_edges_tex.handle, 0); - glClear(GL_COLOR_BUFFER_BIT); - program_manager.BindPresentPrograms(smaa_edge_detection_vert.handle, - smaa_edge_detection_frag.handle); - glDrawArrays(GL_TRIANGLES, 0, 3); - - glBindTextureUnit(0, smaa_edges_tex.handle); - glBindTextureUnit(1, smaa_area_tex.handle); - glBindTextureUnit(2, smaa_search_tex.handle); - glNamedFramebufferTexture(aa_framebuffer.handle, GL_COLOR_ATTACHMENT0, - smaa_blend_tex.handle, 0); - glClear(GL_COLOR_BUFFER_BIT); - program_manager.BindPresentPrograms(smaa_blending_weight_calculation_vert.handle, - smaa_blending_weight_calculation_frag.handle); - glDrawArrays(GL_TRIANGLES, 0, 3); - - glBindTextureUnit(0, screen_info.display_texture); - glBindTextureUnit(1, smaa_blend_tex.handle); - glNamedFramebufferTexture(aa_framebuffer.handle, GL_COLOR_ATTACHMENT0, - aa_texture.handle, 0); - program_manager.BindPresentPrograms(smaa_neighborhood_blending_vert.handle, - smaa_neighborhood_blending_frag.handle); - glDrawArrays(GL_TRIANGLES, 0, 3); - glFrontFace(GL_CW); - } break; - default: - UNREACHABLE(); - } - - glBindFramebuffer(GL_READ_FRAMEBUFFER, old_read_fb); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, old_draw_fb); - - glBindTextureUnit(0, aa_texture.handle); - } - glDisablei(GL_SCISSOR_TEST, 0); - - if (Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::Fsr) { - if (!fsr->AreBuffersInitialized()) { - fsr->InitBuffers(); - } - - auto crop_rect = framebuffer_crop_rect; - if (crop_rect.GetWidth() == 0) { - crop_rect.right = framebuffer_width; - } - if (crop_rect.GetHeight() == 0) { - crop_rect.bottom = framebuffer_height; - } - crop_rect = crop_rect.Scale(Settings::values.resolution_info.up_factor); - const auto fsr_input_width = Settings::values.resolution_info.ScaleUp(framebuffer_width); - const auto fsr_input_height = Settings::values.resolution_info.ScaleUp(framebuffer_height); - glBindSampler(0, present_sampler.handle); - fsr->Draw(program_manager, layout.screen, fsr_input_width, fsr_input_height, crop_rect); - } else { - if (fsr->AreBuffersInitialized()) { - fsr->ReleaseBuffers(); - } - } - - const std::array ortho_matrix = - MakeOrthographicMatrix(static_cast<float>(layout.width), static_cast<float>(layout.height)); - - const auto fragment_handle = [this]() { - switch (Settings::values.scaling_filter.GetValue()) { - case Settings::ScalingFilter::NearestNeighbor: - case Settings::ScalingFilter::Bilinear: - return present_bilinear_fragment.handle; - case Settings::ScalingFilter::Bicubic: - return present_bicubic_fragment.handle; - case Settings::ScalingFilter::Gaussian: - return present_gaussian_fragment.handle; - case Settings::ScalingFilter::ScaleForce: - return present_scaleforce_fragment.handle; - case Settings::ScalingFilter::Fsr: - return fsr->GetPresentFragmentProgram().handle; - default: - return present_bilinear_fragment.handle; - } - }(); - program_manager.BindPresentPrograms(present_vertex.handle, fragment_handle); - glProgramUniformMatrix3x2fv(present_vertex.handle, ModelViewMatrixLocation, 1, GL_FALSE, - ortho_matrix.data()); - - const auto& texcoords = screen_info.display_texcoords; - auto left = texcoords.left; - auto right = texcoords.right; - if (framebuffer_transform_flags != Service::android::BufferTransformFlags::Unset) { - if (framebuffer_transform_flags == Service::android::BufferTransformFlags::FlipV) { - // Flip the framebuffer vertically - left = texcoords.right; - right = texcoords.left; - } else { - // Other transformations are unsupported - LOG_CRITICAL(Render_OpenGL, "Unsupported framebuffer_transform_flags={}", - framebuffer_transform_flags); - UNIMPLEMENTED(); - } - } - - ASSERT_MSG(framebuffer_crop_rect.left == 0, "Unimplemented"); - - f32 left_start{}; - if (framebuffer_crop_rect.Top() > 0) { - left_start = static_cast<f32>(framebuffer_crop_rect.Top()) / - static_cast<f32>(framebuffer_crop_rect.Bottom()); - } - f32 scale_u = static_cast<f32>(framebuffer_width) / static_cast<f32>(screen_info.texture.width); - f32 scale_v = - static_cast<f32>(framebuffer_height) / static_cast<f32>(screen_info.texture.height); - - if (Settings::values.scaling_filter.GetValue() != Settings::ScalingFilter::Fsr) { - // Scale the output by the crop width/height. This is commonly used with 1280x720 rendering - // (e.g. handheld mode) on a 1920x1080 framebuffer. - if (framebuffer_crop_rect.GetWidth() > 0) { - scale_u = static_cast<f32>(framebuffer_crop_rect.GetWidth()) / - static_cast<f32>(screen_info.texture.width); - } - if (framebuffer_crop_rect.GetHeight() > 0) { - scale_v = static_cast<f32>(framebuffer_crop_rect.GetHeight()) / - static_cast<f32>(screen_info.texture.height); - } - } - if (Settings::values.anti_aliasing.GetValue() == Settings::AntiAliasing::Fxaa && - !screen_info.was_accelerated) { - scale_u /= Settings::values.resolution_info.up_factor; - scale_v /= Settings::values.resolution_info.up_factor; - } - - const auto& screen = layout.screen; - const std::array vertices = { - ScreenRectVertex(screen.left, screen.top, texcoords.top * scale_u, - left_start + left * scale_v), - ScreenRectVertex(screen.right, screen.top, texcoords.bottom * scale_u, - left_start + left * scale_v), - ScreenRectVertex(screen.left, screen.bottom, texcoords.top * scale_u, - left_start + right * scale_v), - ScreenRectVertex(screen.right, screen.bottom, texcoords.bottom * scale_u, - left_start + right * scale_v), - }; - glNamedBufferSubData(vertex_buffer.handle, 0, sizeof(vertices), std::data(vertices)); - - glDisable(GL_FRAMEBUFFER_SRGB); - glViewportIndexedf(0, 0.0f, 0.0f, static_cast<GLfloat>(layout.width), - static_cast<GLfloat>(layout.height)); - - glEnableVertexAttribArray(PositionLocation); - glEnableVertexAttribArray(TexCoordLocation); - glVertexAttribDivisor(PositionLocation, 0); - glVertexAttribDivisor(TexCoordLocation, 0); - glVertexAttribFormat(PositionLocation, 2, GL_FLOAT, GL_FALSE, - offsetof(ScreenRectVertex, position)); - glVertexAttribFormat(TexCoordLocation, 2, GL_FLOAT, GL_FALSE, - offsetof(ScreenRectVertex, tex_coord)); - glVertexAttribBinding(PositionLocation, 0); - glVertexAttribBinding(TexCoordLocation, 0); - if (device.HasVertexBufferUnifiedMemory()) { - glBindVertexBuffer(0, 0, 0, sizeof(ScreenRectVertex)); - glBufferAddressRangeNV(GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV, 0, vertex_buffer_address, - sizeof(vertices)); - } else { - glBindVertexBuffer(0, vertex_buffer.handle, 0, sizeof(ScreenRectVertex)); - } - - if (Settings::values.scaling_filter.GetValue() != Settings::ScalingFilter::NearestNeighbor) { - glBindSampler(0, present_sampler.handle); - } else { - glBindSampler(0, present_sampler_nn.handle); - } - - // Update background color before drawing - glClearColor(Settings::values.bg_red.GetValue() / 255.0f, - Settings::values.bg_green.GetValue() / 255.0f, - Settings::values.bg_blue.GetValue() / 255.0f, 1.0f); - - glClear(GL_COLOR_BUFFER_BIT); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - // TODO - // program_manager.RestoreGuestPipeline(); -} - -void RendererOpenGL::RenderScreenshot() { +void RendererOpenGL::RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers) { if (!renderer_settings.screenshot_requested) { return; } @@ -723,7 +181,7 @@ void RendererOpenGL::RenderScreenshot() { glRenderbufferStorage(GL_RENDERBUFFER, GL_SRGB8, layout.width, layout.height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer); - DrawScreen(layout); + blit_screen->DrawScreen(framebuffers, layout); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); glPixelStorei(GL_PACK_ROW_LENGTH, 0); diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index 18699610a..c4625c96e 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h @@ -10,7 +10,6 @@ #include "video_core/renderer_base.h" #include "video_core/renderer_opengl/gl_device.h" -#include "video_core/renderer_opengl/gl_fsr.h" #include "video_core/renderer_opengl/gl_rasterizer.h" #include "video_core/renderer_opengl/gl_resource_manager.h" #include "video_core/renderer_opengl/gl_shader_manager.h" @@ -25,37 +24,13 @@ namespace Core::Frontend { class EmuWindow; } -namespace Core::Memory { -class Memory; -} - -namespace Layout { -struct FramebufferLayout; -} - namespace Tegra { class GPU; } namespace OpenGL { -/// Structure used for storing information about the textures for the Switch screen -struct TextureInfo { - OGLTexture resource; - GLsizei width; - GLsizei height; - GLenum gl_format; - GLenum gl_type; - Service::android::PixelFormat pixel_format; -}; - -/// Structure used for storing information about the display target for the Switch screen -struct ScreenInfo { - GLuint display_texture{}; - bool was_accelerated = false; - const Common::Rectangle<float> display_texcoords{0.0f, 0.0f, 1.0f, 1.0f}; - TextureInfo texture; -}; +class BlitScreen; class RendererOpenGL final : public VideoCore::RendererBase { public: @@ -65,7 +40,7 @@ public: std::unique_ptr<Core::Frontend::GraphicsContext> context_); ~RendererOpenGL() override; - void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override; + void Composite(std::span<const Tegra::FramebufferConfig> framebuffers) override; VideoCore::RasterizerInterface* ReadRasterizer() override { return &rasterizer; @@ -76,28 +51,8 @@ public: } private: - /// Initializes the OpenGL state and creates persistent objects. - void InitOpenGLObjects(); - void AddTelemetryFields(); - - void ConfigureFramebufferTexture(TextureInfo& texture, - const Tegra::FramebufferConfig& framebuffer); - - /// Draws the emulated screens to the emulator window. - void DrawScreen(const Layout::FramebufferLayout& layout); - - void RenderScreenshot(); - - /// Loads framebuffer from emulated memory into the active OpenGL texture. - void LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer); - - /// Fills active OpenGL texture with the given RGB color.Since the color is solid, the texture - /// can be 1x1 but will stretch across whatever it's rendered on. - void LoadColorToActiveGLTexture(u8 color_r, u8 color_g, u8 color_b, u8 color_a, - const TextureInfo& texture); - - void PrepareRendertarget(const Tegra::FramebufferConfig* framebuffer); + void RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers); Core::TelemetrySession& telemetry_session; Core::Frontend::EmuWindow& emu_window; @@ -108,49 +63,9 @@ private: StateTracker state_tracker; ProgramManager program_manager; RasterizerOpenGL rasterizer; - - // OpenGL object IDs - OGLSampler present_sampler; - OGLSampler present_sampler_nn; - OGLBuffer vertex_buffer; - OGLProgram fxaa_vertex; - OGLProgram fxaa_fragment; - OGLProgram present_vertex; - OGLProgram present_bilinear_fragment; - OGLProgram present_bicubic_fragment; - OGLProgram present_gaussian_fragment; - OGLProgram present_scaleforce_fragment; OGLFramebuffer screenshot_framebuffer; - // GPU address of the vertex buffer - GLuint64EXT vertex_buffer_address = 0; - - /// Display information for Switch screen - ScreenInfo screen_info; - OGLTexture aa_texture; - OGLFramebuffer aa_framebuffer; - - OGLProgram smaa_edge_detection_vert; - OGLProgram smaa_blending_weight_calculation_vert; - OGLProgram smaa_neighborhood_blending_vert; - OGLProgram smaa_edge_detection_frag; - OGLProgram smaa_blending_weight_calculation_frag; - OGLProgram smaa_neighborhood_blending_frag; - OGLTexture smaa_area_tex; - OGLTexture smaa_search_tex; - OGLTexture smaa_edges_tex; - OGLTexture smaa_blend_tex; - - std::unique_ptr<FSR> fsr; - - /// OpenGL framebuffer data - std::vector<u8> gl_framebuffer_data; - - /// Used for transforming the framebuffer orientation - Service::android::BufferTransformFlags framebuffer_transform_flags{}; - Common::Rectangle<int> framebuffer_crop_rect; - u32 framebuffer_width; - u32 framebuffer_height; + std::unique_ptr<BlitScreen> blit_screen; }; } // namespace OpenGL diff --git a/src/video_core/renderer_vulkan/present/anti_alias_pass.h b/src/video_core/renderer_vulkan/present/anti_alias_pass.h new file mode 100644 index 000000000..1f20fbd7f --- /dev/null +++ b/src/video_core/renderer_vulkan/present/anti_alias_pass.h @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "video_core/vulkan_common/vulkan_wrapper.h" + +namespace Vulkan { + +class Scheduler; + +class AntiAliasPass { +public: + virtual ~AntiAliasPass() = default; + virtual void Draw(Scheduler& scheduler, size_t image_index, VkImage* inout_image, + VkImageView* inout_image_view) = 0; +}; + +class NoAA final : public AntiAliasPass { +public: + void Draw(Scheduler& scheduler, size_t image_index, VkImage* inout_image, + VkImageView* inout_image_view) override {} +}; + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/filters.cpp b/src/video_core/renderer_vulkan/present/filters.cpp new file mode 100644 index 000000000..b5e08938e --- /dev/null +++ b/src/video_core/renderer_vulkan/present/filters.cpp @@ -0,0 +1,56 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/common_types.h" + +#include "video_core/host_shaders/present_bicubic_frag_spv.h" +#include "video_core/host_shaders/present_gaussian_frag_spv.h" +#include "video_core/host_shaders/vulkan_present_frag_spv.h" +#include "video_core/host_shaders/vulkan_present_scaleforce_fp16_frag_spv.h" +#include "video_core/host_shaders/vulkan_present_scaleforce_fp32_frag_spv.h" +#include "video_core/renderer_vulkan/present/filters.h" +#include "video_core/renderer_vulkan/present/util.h" +#include "video_core/renderer_vulkan/vk_shader_util.h" +#include "video_core/vulkan_common/vulkan_device.h" + +namespace Vulkan { + +namespace { + +vk::ShaderModule SelectScaleForceShader(const Device& device) { + if (device.IsFloat16Supported()) { + return BuildShader(device, VULKAN_PRESENT_SCALEFORCE_FP16_FRAG_SPV); + } else { + return BuildShader(device, VULKAN_PRESENT_SCALEFORCE_FP32_FRAG_SPV); + } +} + +} // Anonymous namespace + +std::unique_ptr<WindowAdaptPass> MakeNearestNeighbor(const Device& device, VkFormat frame_format) { + return std::make_unique<WindowAdaptPass>(device, frame_format, + CreateNearestNeighborSampler(device), + BuildShader(device, VULKAN_PRESENT_FRAG_SPV)); +} + +std::unique_ptr<WindowAdaptPass> MakeBilinear(const Device& device, VkFormat frame_format) { + return std::make_unique<WindowAdaptPass>(device, frame_format, CreateBilinearSampler(device), + BuildShader(device, VULKAN_PRESENT_FRAG_SPV)); +} + +std::unique_ptr<WindowAdaptPass> MakeBicubic(const Device& device, VkFormat frame_format) { + return std::make_unique<WindowAdaptPass>(device, frame_format, CreateBilinearSampler(device), + BuildShader(device, PRESENT_BICUBIC_FRAG_SPV)); +} + +std::unique_ptr<WindowAdaptPass> MakeGaussian(const Device& device, VkFormat frame_format) { + return std::make_unique<WindowAdaptPass>(device, frame_format, CreateBilinearSampler(device), + BuildShader(device, PRESENT_GAUSSIAN_FRAG_SPV)); +} + +std::unique_ptr<WindowAdaptPass> MakeScaleForce(const Device& device, VkFormat frame_format) { + return std::make_unique<WindowAdaptPass>(device, frame_format, CreateBilinearSampler(device), + SelectScaleForceShader(device)); +} + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/filters.h b/src/video_core/renderer_vulkan/present/filters.h new file mode 100644 index 000000000..6c83726dd --- /dev/null +++ b/src/video_core/renderer_vulkan/present/filters.h @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "video_core/renderer_vulkan/present/window_adapt_pass.h" + +namespace Vulkan { + +class MemoryAllocator; + +std::unique_ptr<WindowAdaptPass> MakeNearestNeighbor(const Device& device, VkFormat frame_format); +std::unique_ptr<WindowAdaptPass> MakeBilinear(const Device& device, VkFormat frame_format); +std::unique_ptr<WindowAdaptPass> MakeBicubic(const Device& device, VkFormat frame_format); +std::unique_ptr<WindowAdaptPass> MakeGaussian(const Device& device, VkFormat frame_format); +std::unique_ptr<WindowAdaptPass> MakeScaleForce(const Device& device, VkFormat frame_format); + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/fsr.cpp b/src/video_core/renderer_vulkan/present/fsr.cpp new file mode 100644 index 000000000..3f708be70 --- /dev/null +++ b/src/video_core/renderer_vulkan/present/fsr.cpp @@ -0,0 +1,226 @@ +// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/common_types.h" +#include "common/div_ceil.h" +#include "common/settings.h" + +#include "video_core/fsr.h" +#include "video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp16_frag_spv.h" +#include "video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp32_frag_spv.h" +#include "video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp16_frag_spv.h" +#include "video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp32_frag_spv.h" +#include "video_core/host_shaders/vulkan_fidelityfx_fsr_vert_spv.h" +#include "video_core/renderer_vulkan/present/fsr.h" +#include "video_core/renderer_vulkan/present/util.h" +#include "video_core/renderer_vulkan/vk_scheduler.h" +#include "video_core/renderer_vulkan/vk_shader_util.h" +#include "video_core/vulkan_common/vulkan_device.h" + +namespace Vulkan { +using namespace FSR; + +using PushConstants = std::array<u32, 4 * 4>; + +FSR::FSR(const Device& device, MemoryAllocator& memory_allocator, size_t image_count, + VkExtent2D extent) + : m_device{device}, m_memory_allocator{memory_allocator}, + m_image_count{image_count}, m_extent{extent} { + + CreateImages(); + CreateRenderPasses(); + CreateSampler(); + CreateShaders(); + CreateDescriptorPool(); + CreateDescriptorSetLayout(); + CreateDescriptorSets(); + CreatePipelineLayouts(); + CreatePipelines(); +} + +void FSR::CreateImages() { + m_dynamic_images.resize(m_image_count); + for (auto& images : m_dynamic_images) { + images.images[Easu] = + CreateWrappedImage(m_memory_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT); + images.images[Rcas] = + CreateWrappedImage(m_memory_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT); + images.image_views[Easu] = + CreateWrappedImageView(m_device, images.images[Easu], VK_FORMAT_R16G16B16A16_SFLOAT); + images.image_views[Rcas] = + CreateWrappedImageView(m_device, images.images[Rcas], VK_FORMAT_R16G16B16A16_SFLOAT); + } +} + +void FSR::CreateRenderPasses() { + m_renderpass = CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16B16A16_SFLOAT); + + for (auto& images : m_dynamic_images) { + images.framebuffers[Easu] = + CreateWrappedFramebuffer(m_device, m_renderpass, images.image_views[Easu], m_extent); + images.framebuffers[Rcas] = + CreateWrappedFramebuffer(m_device, m_renderpass, images.image_views[Rcas], m_extent); + } +} + +void FSR::CreateSampler() { + m_sampler = CreateBilinearSampler(m_device); +} + +void FSR::CreateShaders() { + m_vert_shader = BuildShader(m_device, VULKAN_FIDELITYFX_FSR_VERT_SPV); + + if (m_device.IsFloat16Supported()) { + m_easu_shader = BuildShader(m_device, VULKAN_FIDELITYFX_FSR_EASU_FP16_FRAG_SPV); + m_rcas_shader = BuildShader(m_device, VULKAN_FIDELITYFX_FSR_RCAS_FP16_FRAG_SPV); + } else { + m_easu_shader = BuildShader(m_device, VULKAN_FIDELITYFX_FSR_EASU_FP32_FRAG_SPV); + m_rcas_shader = BuildShader(m_device, VULKAN_FIDELITYFX_FSR_RCAS_FP32_FRAG_SPV); + } +} + +void FSR::CreateDescriptorPool() { + // EASU: 1 descriptor + // RCAS: 1 descriptor + // 2 descriptors, 2 descriptor sets per invocation + m_descriptor_pool = CreateWrappedDescriptorPool(m_device, 2 * m_image_count, 2 * m_image_count); +} + +void FSR::CreateDescriptorSetLayout() { + m_descriptor_set_layout = + CreateWrappedDescriptorSetLayout(m_device, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER}); +} + +void FSR::CreateDescriptorSets() { + std::vector<VkDescriptorSetLayout> layouts(MaxFsrStage, *m_descriptor_set_layout); + + for (auto& images : m_dynamic_images) { + images.descriptor_sets = CreateWrappedDescriptorSets(m_descriptor_pool, layouts); + } +} + +void FSR::CreatePipelineLayouts() { + const VkPushConstantRange range{ + .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT, + .offset = 0, + .size = sizeof(PushConstants), + }; + VkPipelineLayoutCreateInfo ci{ + .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .setLayoutCount = 1, + .pSetLayouts = m_descriptor_set_layout.address(), + .pushConstantRangeCount = 1, + .pPushConstantRanges = &range, + }; + + m_pipeline_layout = m_device.GetLogical().CreatePipelineLayout(ci); +} + +void FSR::CreatePipelines() { + m_easu_pipeline = CreateWrappedPipeline(m_device, m_renderpass, m_pipeline_layout, + std::tie(m_vert_shader, m_easu_shader)); + m_rcas_pipeline = CreateWrappedPipeline(m_device, m_renderpass, m_pipeline_layout, + std::tie(m_vert_shader, m_rcas_shader)); +} + +void FSR::UpdateDescriptorSets(VkImageView image_view, size_t image_index) { + Images& images = m_dynamic_images[image_index]; + std::vector<VkDescriptorImageInfo> image_infos; + std::vector<VkWriteDescriptorSet> updates; + image_infos.reserve(2); + + updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, image_view, + images.descriptor_sets[Easu], 0)); + updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, *images.image_views[Easu], + images.descriptor_sets[Rcas], 0)); + + m_device.GetLogical().UpdateDescriptorSets(updates, {}); +} + +void FSR::UploadImages(Scheduler& scheduler) { + if (m_images_ready) { + return; + } + + scheduler.Record([&](vk::CommandBuffer cmdbuf) { + for (auto& image : m_dynamic_images) { + ClearColorImage(cmdbuf, *image.images[Easu]); + ClearColorImage(cmdbuf, *image.images[Rcas]); + } + }); + scheduler.Finish(); + + m_images_ready = true; +} + +VkImageView FSR::Draw(Scheduler& scheduler, size_t image_index, VkImage source_image, + VkImageView source_image_view, VkExtent2D input_image_extent, + const Common::Rectangle<f32>& crop_rect) { + Images& images = m_dynamic_images[image_index]; + + VkImage easu_image = *images.images[Easu]; + VkImage rcas_image = *images.images[Rcas]; + VkDescriptorSet easu_descriptor_set = images.descriptor_sets[Easu]; + VkDescriptorSet rcas_descriptor_set = images.descriptor_sets[Rcas]; + VkFramebuffer easu_framebuffer = *images.framebuffers[Easu]; + VkFramebuffer rcas_framebuffer = *images.framebuffers[Rcas]; + VkPipeline easu_pipeline = *m_easu_pipeline; + VkPipeline rcas_pipeline = *m_rcas_pipeline; + VkPipelineLayout pipeline_layout = *m_pipeline_layout; + VkRenderPass renderpass = *m_renderpass; + VkExtent2D extent = m_extent; + + const f32 input_image_width = static_cast<f32>(input_image_extent.width); + const f32 input_image_height = static_cast<f32>(input_image_extent.height); + const f32 output_image_width = static_cast<f32>(extent.width); + const f32 output_image_height = static_cast<f32>(extent.height); + const f32 viewport_width = (crop_rect.right - crop_rect.left) * input_image_width; + const f32 viewport_x = crop_rect.left * input_image_width; + const f32 viewport_height = (crop_rect.bottom - crop_rect.top) * input_image_height; + const f32 viewport_y = crop_rect.top * input_image_height; + + PushConstants easu_con{}; + PushConstants rcas_con{}; + FsrEasuConOffset(easu_con.data() + 0, easu_con.data() + 4, easu_con.data() + 8, + easu_con.data() + 12, viewport_width, viewport_height, input_image_width, + input_image_height, output_image_width, output_image_height, viewport_x, + viewport_y); + + const float sharpening = + static_cast<float>(Settings::values.fsr_sharpening_slider.GetValue()) / 100.0f; + FsrRcasCon(rcas_con.data(), sharpening); + + UploadImages(scheduler); + UpdateDescriptorSets(source_image_view, image_index); + + scheduler.RequestOutsideRenderPassOperationContext(); + scheduler.Record([=](vk::CommandBuffer cmdbuf) { + TransitionImageLayout(cmdbuf, source_image, VK_IMAGE_LAYOUT_GENERAL); + TransitionImageLayout(cmdbuf, easu_image, VK_IMAGE_LAYOUT_GENERAL); + BeginRenderPass(cmdbuf, renderpass, easu_framebuffer, extent); + cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, easu_pipeline); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout, 0, + easu_descriptor_set, {}); + cmdbuf.PushConstants(pipeline_layout, VK_SHADER_STAGE_FRAGMENT_BIT, easu_con); + cmdbuf.Draw(3, 1, 0, 0); + cmdbuf.EndRenderPass(); + + TransitionImageLayout(cmdbuf, easu_image, VK_IMAGE_LAYOUT_GENERAL); + TransitionImageLayout(cmdbuf, rcas_image, VK_IMAGE_LAYOUT_GENERAL); + BeginRenderPass(cmdbuf, renderpass, rcas_framebuffer, extent); + cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, rcas_pipeline); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout, 0, + rcas_descriptor_set, {}); + cmdbuf.PushConstants(pipeline_layout, VK_SHADER_STAGE_FRAGMENT_BIT, rcas_con); + cmdbuf.Draw(3, 1, 0, 0); + cmdbuf.EndRenderPass(); + + TransitionImageLayout(cmdbuf, rcas_image, VK_IMAGE_LAYOUT_GENERAL); + }); + + return *images.image_views[Rcas]; +} + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/fsr.h b/src/video_core/renderer_vulkan/present/fsr.h new file mode 100644 index 000000000..8602e8146 --- /dev/null +++ b/src/video_core/renderer_vulkan/present/fsr.h @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/math_util.h" +#include "video_core/vulkan_common/vulkan_memory_allocator.h" +#include "video_core/vulkan_common/vulkan_wrapper.h" + +namespace Vulkan { + +class Device; +class Scheduler; + +class FSR { +public: + explicit FSR(const Device& device, MemoryAllocator& memory_allocator, size_t image_count, + VkExtent2D extent); + VkImageView Draw(Scheduler& scheduler, size_t image_index, VkImage source_image, + VkImageView source_image_view, VkExtent2D input_image_extent, + const Common::Rectangle<f32>& crop_rect); + +private: + void CreateImages(); + void CreateRenderPasses(); + void CreateSampler(); + void CreateShaders(); + void CreateDescriptorPool(); + void CreateDescriptorSetLayout(); + void CreateDescriptorSets(); + void CreatePipelineLayouts(); + void CreatePipelines(); + + void UploadImages(Scheduler& scheduler); + void UpdateDescriptorSets(VkImageView image_view, size_t image_index); + + const Device& m_device; + MemoryAllocator& m_memory_allocator; + const size_t m_image_count; + const VkExtent2D m_extent; + + enum FsrStage { + Easu, + Rcas, + MaxFsrStage, + }; + + vk::DescriptorPool m_descriptor_pool; + vk::DescriptorSetLayout m_descriptor_set_layout; + vk::PipelineLayout m_pipeline_layout; + vk::ShaderModule m_vert_shader; + vk::ShaderModule m_easu_shader; + vk::ShaderModule m_rcas_shader; + vk::Pipeline m_easu_pipeline; + vk::Pipeline m_rcas_pipeline; + vk::RenderPass m_renderpass; + vk::Sampler m_sampler; + + struct Images { + vk::DescriptorSets descriptor_sets; + std::array<vk::Image, MaxFsrStage> images; + std::array<vk::ImageView, MaxFsrStage> image_views; + std::array<vk::Framebuffer, MaxFsrStage> framebuffers; + }; + std::vector<Images> m_dynamic_images; + bool m_images_ready{}; +}; + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/fxaa.cpp b/src/video_core/renderer_vulkan/present/fxaa.cpp new file mode 100644 index 000000000..bdafd1f4d --- /dev/null +++ b/src/video_core/renderer_vulkan/present/fxaa.cpp @@ -0,0 +1,148 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/common_types.h" + +#include "video_core/host_shaders/fxaa_frag_spv.h" +#include "video_core/host_shaders/fxaa_vert_spv.h" +#include "video_core/renderer_vulkan/present/fxaa.h" +#include "video_core/renderer_vulkan/present/util.h" +#include "video_core/renderer_vulkan/vk_scheduler.h" +#include "video_core/renderer_vulkan/vk_shader_util.h" +#include "video_core/vulkan_common/vulkan_device.h" + +namespace Vulkan { + +FXAA::FXAA(const Device& device, MemoryAllocator& allocator, size_t image_count, VkExtent2D extent) + : m_device(device), m_allocator(allocator), m_extent(extent), + m_image_count(static_cast<u32>(image_count)) { + CreateImages(); + CreateRenderPasses(); + CreateSampler(); + CreateShaders(); + CreateDescriptorPool(); + CreateDescriptorSetLayouts(); + CreateDescriptorSets(); + CreatePipelineLayouts(); + CreatePipelines(); +} + +FXAA::~FXAA() = default; + +void FXAA::CreateImages() { + for (u32 i = 0; i < m_image_count; i++) { + Image& image = m_dynamic_images.emplace_back(); + + image.image = CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT); + image.image_view = + CreateWrappedImageView(m_device, image.image, VK_FORMAT_R16G16B16A16_SFLOAT); + } +} + +void FXAA::CreateRenderPasses() { + m_renderpass = CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16B16A16_SFLOAT); + + for (auto& image : m_dynamic_images) { + image.framebuffer = + CreateWrappedFramebuffer(m_device, m_renderpass, image.image_view, m_extent); + } +} + +void FXAA::CreateSampler() { + m_sampler = CreateWrappedSampler(m_device); +} + +void FXAA::CreateShaders() { + m_vertex_shader = CreateWrappedShaderModule(m_device, FXAA_VERT_SPV); + m_fragment_shader = CreateWrappedShaderModule(m_device, FXAA_FRAG_SPV); +} + +void FXAA::CreateDescriptorPool() { + // 2 descriptors, 1 descriptor set per image + m_descriptor_pool = CreateWrappedDescriptorPool(m_device, 2 * m_image_count, m_image_count); +} + +void FXAA::CreateDescriptorSetLayouts() { + m_descriptor_set_layout = + CreateWrappedDescriptorSetLayout(m_device, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER}); +} + +void FXAA::CreateDescriptorSets() { + VkDescriptorSetLayout layout = *m_descriptor_set_layout; + + for (auto& images : m_dynamic_images) { + images.descriptor_sets = CreateWrappedDescriptorSets(m_descriptor_pool, {layout}); + } +} + +void FXAA::CreatePipelineLayouts() { + m_pipeline_layout = CreateWrappedPipelineLayout(m_device, m_descriptor_set_layout); +} + +void FXAA::CreatePipelines() { + m_pipeline = CreateWrappedPipeline(m_device, m_renderpass, m_pipeline_layout, + std::tie(m_vertex_shader, m_fragment_shader)); +} + +void FXAA::UpdateDescriptorSets(VkImageView image_view, size_t image_index) { + Image& image = m_dynamic_images[image_index]; + std::vector<VkDescriptorImageInfo> image_infos; + std::vector<VkWriteDescriptorSet> updates; + image_infos.reserve(2); + + updates.push_back( + CreateWriteDescriptorSet(image_infos, *m_sampler, image_view, image.descriptor_sets[0], 0)); + updates.push_back( + CreateWriteDescriptorSet(image_infos, *m_sampler, image_view, image.descriptor_sets[0], 1)); + + m_device.GetLogical().UpdateDescriptorSets(updates, {}); +} + +void FXAA::UploadImages(Scheduler& scheduler) { + if (m_images_ready) { + return; + } + + scheduler.Record([&](vk::CommandBuffer cmdbuf) { + for (auto& image : m_dynamic_images) { + ClearColorImage(cmdbuf, *image.image); + } + }); + scheduler.Finish(); + + m_images_ready = true; +} + +void FXAA::Draw(Scheduler& scheduler, size_t image_index, VkImage* inout_image, + VkImageView* inout_image_view) { + const Image& image{m_dynamic_images[image_index]}; + const VkImage input_image{*inout_image}; + const VkImage output_image{*image.image}; + const VkDescriptorSet descriptor_set{image.descriptor_sets[0]}; + const VkFramebuffer framebuffer{*image.framebuffer}; + const VkRenderPass renderpass{*m_renderpass}; + const VkPipeline pipeline{*m_pipeline}; + const VkPipelineLayout layout{*m_pipeline_layout}; + const VkExtent2D extent{m_extent}; + + UploadImages(scheduler); + UpdateDescriptorSets(*inout_image_view, image_index); + + scheduler.RequestOutsideRenderPassOperationContext(); + scheduler.Record([=](vk::CommandBuffer cmdbuf) { + TransitionImageLayout(cmdbuf, input_image, VK_IMAGE_LAYOUT_GENERAL); + TransitionImageLayout(cmdbuf, output_image, VK_IMAGE_LAYOUT_GENERAL); + BeginRenderPass(cmdbuf, renderpass, framebuffer, extent); + cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 0, descriptor_set, {}); + cmdbuf.Draw(3, 1, 0, 0); + cmdbuf.EndRenderPass(); + TransitionImageLayout(cmdbuf, output_image, VK_IMAGE_LAYOUT_GENERAL); + }); + + *inout_image = *image.image; + *inout_image_view = *image.image_view; +} + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/fxaa.h b/src/video_core/renderer_vulkan/present/fxaa.h new file mode 100644 index 000000000..97a2e5c1c --- /dev/null +++ b/src/video_core/renderer_vulkan/present/fxaa.h @@ -0,0 +1,63 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "video_core/renderer_vulkan/present/anti_alias_pass.h" +#include "video_core/vulkan_common/vulkan_memory_allocator.h" +#include "video_core/vulkan_common/vulkan_wrapper.h" + +namespace Vulkan { + +class Device; +class Scheduler; +class StagingBufferPool; + +class FXAA final : public AntiAliasPass { +public: + explicit FXAA(const Device& device, MemoryAllocator& allocator, size_t image_count, + VkExtent2D extent); + ~FXAA() override; + + void Draw(Scheduler& scheduler, size_t image_index, VkImage* inout_image, + VkImageView* inout_image_view) override; + +private: + void CreateImages(); + void CreateRenderPasses(); + void CreateSampler(); + void CreateShaders(); + void CreateDescriptorPool(); + void CreateDescriptorSetLayouts(); + void CreateDescriptorSets(); + void CreatePipelineLayouts(); + void CreatePipelines(); + void UpdateDescriptorSets(VkImageView image_view, size_t image_index); + void UploadImages(Scheduler& scheduler); + + const Device& m_device; + MemoryAllocator& m_allocator; + const VkExtent2D m_extent; + const u32 m_image_count; + + vk::ShaderModule m_vertex_shader{}; + vk::ShaderModule m_fragment_shader{}; + vk::DescriptorPool m_descriptor_pool{}; + vk::DescriptorSetLayout m_descriptor_set_layout{}; + vk::PipelineLayout m_pipeline_layout{}; + vk::Pipeline m_pipeline{}; + vk::RenderPass m_renderpass{}; + + struct Image { + vk::DescriptorSets descriptor_sets{}; + vk::Framebuffer framebuffer{}; + vk::Image image{}; + vk::ImageView image_view{}; + }; + std::vector<Image> m_dynamic_images{}; + bool m_images_ready{}; + + vk::Sampler m_sampler{}; +}; + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/layer.cpp b/src/video_core/renderer_vulkan/present/layer.cpp new file mode 100644 index 000000000..cfc04be44 --- /dev/null +++ b/src/video_core/renderer_vulkan/present/layer.cpp @@ -0,0 +1,336 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "video_core/renderer_vulkan/vk_rasterizer.h" + +#include "common/settings.h" +#include "video_core/framebuffer_config.h" +#include "video_core/renderer_vulkan/present/fsr.h" +#include "video_core/renderer_vulkan/present/fxaa.h" +#include "video_core/renderer_vulkan/present/layer.h" +#include "video_core/renderer_vulkan/present/present_push_constants.h" +#include "video_core/renderer_vulkan/present/smaa.h" +#include "video_core/renderer_vulkan/present/util.h" +#include "video_core/renderer_vulkan/vk_blit_screen.h" +#include "video_core/textures/decoders.h" + +namespace Vulkan { + +namespace { + +u32 GetBytesPerPixel(const Tegra::FramebufferConfig& framebuffer) { + using namespace VideoCore::Surface; + return BytesPerBlock(PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)); +} + +std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) { + return static_cast<std::size_t>(framebuffer.stride) * + static_cast<std::size_t>(framebuffer.height) * GetBytesPerPixel(framebuffer); +} + +VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) { + switch (framebuffer.pixel_format) { + case Service::android::PixelFormat::Rgba8888: + case Service::android::PixelFormat::Rgbx8888: + return VK_FORMAT_A8B8G8R8_UNORM_PACK32; + case Service::android::PixelFormat::Rgb565: + return VK_FORMAT_R5G6B5_UNORM_PACK16; + case Service::android::PixelFormat::Bgra8888: + return VK_FORMAT_B8G8R8A8_UNORM; + default: + UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}", + static_cast<u32>(framebuffer.pixel_format)); + return VK_FORMAT_A8B8G8R8_UNORM_PACK32; + } +} + +} // Anonymous namespace + +Layer::Layer(const Device& device_, MemoryAllocator& memory_allocator_, Scheduler& scheduler_, + Tegra::MaxwellDeviceMemoryManager& device_memory_, size_t image_count_, + VkExtent2D output_size, VkDescriptorSetLayout layout) + : device(device_), memory_allocator(memory_allocator_), scheduler(scheduler_), + device_memory(device_memory_), image_count(image_count_) { + CreateDescriptorPool(); + CreateDescriptorSets(layout); + if (Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::Fsr) { + CreateFSR(output_size); + } +} + +Layer::~Layer() { + ReleaseRawImages(); +} + +void Layer::ConfigureDraw(PresentPushConstants* out_push_constants, + VkDescriptorSet* out_descriptor_set, RasterizerVulkan& rasterizer, + VkSampler sampler, size_t image_index, + const Tegra::FramebufferConfig& framebuffer, + const Layout::FramebufferLayout& layout) { + const auto texture_info = rasterizer.AccelerateDisplay( + framebuffer, framebuffer.address + framebuffer.offset, framebuffer.stride); + const u32 texture_width = texture_info ? texture_info->width : framebuffer.width; + const u32 texture_height = texture_info ? texture_info->height : framebuffer.height; + const u32 scaled_width = texture_info ? texture_info->scaled_width : texture_width; + const u32 scaled_height = texture_info ? texture_info->scaled_height : texture_height; + const bool use_accelerated = texture_info.has_value(); + + RefreshResources(framebuffer); + SetAntiAliasPass(); + + // Finish any pending renderpass + scheduler.RequestOutsideRenderPassOperationContext(); + scheduler.Wait(resource_ticks[image_index]); + SCOPE_EXIT({ resource_ticks[image_index] = scheduler.CurrentTick(); }); + + if (!use_accelerated) { + UpdateRawImage(framebuffer, image_index); + } + + VkImage source_image = texture_info ? texture_info->image : *raw_images[image_index]; + VkImageView source_image_view = + texture_info ? texture_info->image_view : *raw_image_views[image_index]; + + anti_alias->Draw(scheduler, image_index, &source_image, &source_image_view); + + auto crop_rect = Tegra::NormalizeCrop(framebuffer, texture_width, texture_height); + const VkExtent2D render_extent{ + .width = scaled_width, + .height = scaled_height, + }; + + if (fsr) { + source_image_view = fsr->Draw(scheduler, image_index, source_image, source_image_view, + render_extent, crop_rect); + crop_rect = {0, 0, 1, 1}; + } + + SetMatrixData(*out_push_constants, layout); + SetVertexData(*out_push_constants, layout, crop_rect); + + UpdateDescriptorSet(source_image_view, sampler, image_index); + *out_descriptor_set = descriptor_sets[image_index]; +} + +void Layer::CreateDescriptorPool() { + descriptor_pool = CreateWrappedDescriptorPool(device, image_count, image_count); +} + +void Layer::CreateDescriptorSets(VkDescriptorSetLayout layout) { + const std::vector layouts(image_count, layout); + descriptor_sets = CreateWrappedDescriptorSets(descriptor_pool, layouts); +} + +void Layer::CreateStagingBuffer(const Tegra::FramebufferConfig& framebuffer) { + const VkBufferCreateInfo ci{ + .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .size = CalculateBufferSize(framebuffer), + .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, + .sharingMode = VK_SHARING_MODE_EXCLUSIVE, + .queueFamilyIndexCount = 0, + .pQueueFamilyIndices = nullptr, + }; + + buffer = memory_allocator.CreateBuffer(ci, MemoryUsage::Upload); +} + +void Layer::CreateRawImages(const Tegra::FramebufferConfig& framebuffer) { + const auto format = GetFormat(framebuffer); + resource_ticks.resize(image_count); + raw_images.resize(image_count); + raw_image_views.resize(image_count); + + for (size_t i = 0; i < image_count; ++i) { + raw_images[i] = + CreateWrappedImage(memory_allocator, {framebuffer.width, framebuffer.height}, format); + raw_image_views[i] = CreateWrappedImageView(device, raw_images[i], format); + } +} + +void Layer::CreateFSR(VkExtent2D output_size) { + fsr = std::make_unique<FSR>(device, memory_allocator, image_count, output_size); +} + +void Layer::RefreshResources(const Tegra::FramebufferConfig& framebuffer) { + if (framebuffer.width == raw_width && framebuffer.height == raw_height && + framebuffer.pixel_format == pixel_format && !raw_images.empty()) { + return; + } + + raw_width = framebuffer.width; + raw_height = framebuffer.height; + pixel_format = framebuffer.pixel_format; + anti_alias.reset(); + + ReleaseRawImages(); + CreateStagingBuffer(framebuffer); + CreateRawImages(framebuffer); +} + +void Layer::SetAntiAliasPass() { + if (anti_alias && anti_alias_setting == Settings::values.anti_aliasing.GetValue()) { + return; + } + + anti_alias_setting = Settings::values.anti_aliasing.GetValue(); + + const VkExtent2D render_area{ + .width = Settings::values.resolution_info.ScaleUp(raw_width), + .height = Settings::values.resolution_info.ScaleUp(raw_height), + }; + + switch (anti_alias_setting) { + case Settings::AntiAliasing::Fxaa: + anti_alias = std::make_unique<FXAA>(device, memory_allocator, image_count, render_area); + break; + case Settings::AntiAliasing::Smaa: + anti_alias = std::make_unique<SMAA>(device, memory_allocator, image_count, render_area); + break; + default: + anti_alias = std::make_unique<NoAA>(); + break; + } +} + +void Layer::ReleaseRawImages() { + for (const u64 tick : resource_ticks) { + scheduler.Wait(tick); + } + raw_images.clear(); + buffer.reset(); +} + +u64 Layer::CalculateBufferSize(const Tegra::FramebufferConfig& framebuffer) const { + return GetSizeInBytes(framebuffer) * image_count; +} + +u64 Layer::GetRawImageOffset(const Tegra::FramebufferConfig& framebuffer, + size_t image_index) const { + return GetSizeInBytes(framebuffer) * image_index; +} + +void Layer::SetMatrixData(PresentPushConstants& data, + const Layout::FramebufferLayout& layout) const { + data.modelview_matrix = + MakeOrthographicMatrix(static_cast<f32>(layout.width), static_cast<f32>(layout.height)); +} + +void Layer::SetVertexData(PresentPushConstants& data, const Layout::FramebufferLayout& layout, + const Common::Rectangle<f32>& crop) const { + // Map the coordinates to the screen. + const auto& screen = layout.screen; + const auto x = static_cast<f32>(screen.left); + const auto y = static_cast<f32>(screen.top); + const auto w = static_cast<f32>(screen.GetWidth()); + const auto h = static_cast<f32>(screen.GetHeight()); + + data.vertices[0] = ScreenRectVertex(x, y, crop.left, crop.top); + data.vertices[1] = ScreenRectVertex(x + w, y, crop.right, crop.top); + data.vertices[2] = ScreenRectVertex(x, y + h, crop.left, crop.bottom); + data.vertices[3] = ScreenRectVertex(x + w, y + h, crop.right, crop.bottom); +} + +void Layer::UpdateDescriptorSet(VkImageView image_view, VkSampler sampler, size_t image_index) { + const VkDescriptorImageInfo image_info{ + .sampler = sampler, + .imageView = image_view, + .imageLayout = VK_IMAGE_LAYOUT_GENERAL, + }; + + const VkWriteDescriptorSet sampler_write{ + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .pNext = nullptr, + .dstSet = descriptor_sets[image_index], + .dstBinding = 0, + .dstArrayElement = 0, + .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + .pImageInfo = &image_info, + .pBufferInfo = nullptr, + .pTexelBufferView = nullptr, + }; + + device.GetLogical().UpdateDescriptorSets(std::array{sampler_write}, {}); +} + +void Layer::UpdateRawImage(const Tegra::FramebufferConfig& framebuffer, size_t image_index) { + const std::span<u8> mapped_span = buffer.Mapped(); + + const u64 image_offset = GetRawImageOffset(framebuffer, image_index); + + const DAddr framebuffer_addr = framebuffer.address + framebuffer.offset; + const u8* const host_ptr = device_memory.GetPointer<u8>(framebuffer_addr); + + // TODO(Rodrigo): Read this from HLE + constexpr u32 block_height_log2 = 4; + const u32 bytes_per_pixel = GetBytesPerPixel(framebuffer); + const u64 linear_size{GetSizeInBytes(framebuffer)}; + const u64 tiled_size{Tegra::Texture::CalculateSize( + true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)}; + Tegra::Texture::UnswizzleTexture( + mapped_span.subspan(image_offset, linear_size), std::span(host_ptr, tiled_size), + bytes_per_pixel, framebuffer.width, framebuffer.height, 1, block_height_log2, 0); + + const VkBufferImageCopy copy{ + .bufferOffset = image_offset, + .bufferRowLength = 0, + .bufferImageHeight = 0, + .imageSubresource = + { + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .mipLevel = 0, + .baseArrayLayer = 0, + .layerCount = 1, + }, + .imageOffset = {.x = 0, .y = 0, .z = 0}, + .imageExtent = + { + .width = framebuffer.width, + .height = framebuffer.height, + .depth = 1, + }, + }; + scheduler.Record([this, copy, index = image_index](vk::CommandBuffer cmdbuf) { + const VkImage image = *raw_images[index]; + const VkImageMemoryBarrier base_barrier{ + .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + .pNext = nullptr, + .srcAccessMask = 0, + .dstAccessMask = 0, + .oldLayout = VK_IMAGE_LAYOUT_GENERAL, + .newLayout = VK_IMAGE_LAYOUT_GENERAL, + .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .image = image, + .subresourceRange{ + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .baseMipLevel = 0, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1, + }, + }; + VkImageMemoryBarrier read_barrier = base_barrier; + read_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + read_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + read_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + + VkImageMemoryBarrier write_barrier = base_barrier; + write_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + write_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + write_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + + cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, + read_barrier); + cmdbuf.CopyBufferToImage(*buffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, copy); + cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | + VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + 0, write_barrier); + }); +} + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/layer.h b/src/video_core/renderer_vulkan/present/layer.h new file mode 100644 index 000000000..88d43fc5f --- /dev/null +++ b/src/video_core/renderer_vulkan/present/layer.h @@ -0,0 +1,92 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/math_util.h" +#include "video_core/host1x/gpu_device_memory_manager.h" +#include "video_core/vulkan_common/vulkan_wrapper.h" + +namespace Layout { +struct FramebufferLayout; +} + +namespace Tegra { +struct FramebufferConfig; +} + +namespace Service::android { +enum class PixelFormat : u32; +} + +namespace Settings { +enum class AntiAliasing : u32; +} + +namespace Vulkan { + +class AntiAliasPass; +class Device; +class FSR; +class MemoryAllocator; +struct PresentPushConstants; +class RasterizerVulkan; +class Scheduler; + +class Layer final { +public: + explicit Layer(const Device& device, MemoryAllocator& memory_allocator, Scheduler& scheduler, + Tegra::MaxwellDeviceMemoryManager& device_memory, size_t image_count, + VkExtent2D output_size, VkDescriptorSetLayout layout); + ~Layer(); + + void ConfigureDraw(PresentPushConstants* out_push_constants, + VkDescriptorSet* out_descriptor_set, RasterizerVulkan& rasterizer, + VkSampler sampler, size_t image_index, + const Tegra::FramebufferConfig& framebuffer, + const Layout::FramebufferLayout& layout); + +private: + void CreateDescriptorPool(); + void CreateDescriptorSets(VkDescriptorSetLayout layout); + void CreateStagingBuffer(const Tegra::FramebufferConfig& framebuffer); + void CreateRawImages(const Tegra::FramebufferConfig& framebuffer); + void CreateFSR(VkExtent2D output_size); + + void RefreshResources(const Tegra::FramebufferConfig& framebuffer); + void SetAntiAliasPass(); + void ReleaseRawImages(); + + u64 CalculateBufferSize(const Tegra::FramebufferConfig& framebuffer) const; + u64 GetRawImageOffset(const Tegra::FramebufferConfig& framebuffer, size_t image_index) const; + + void SetMatrixData(PresentPushConstants& data, const Layout::FramebufferLayout& layout) const; + void SetVertexData(PresentPushConstants& data, const Layout::FramebufferLayout& layout, + const Common::Rectangle<f32>& crop) const; + void UpdateDescriptorSet(VkImageView image_view, VkSampler sampler, size_t image_index); + void UpdateRawImage(const Tegra::FramebufferConfig& framebuffer, size_t image_index); + +private: + const Device& device; + MemoryAllocator& memory_allocator; + Scheduler& scheduler; + Tegra::MaxwellDeviceMemoryManager& device_memory; + const size_t image_count{}; + vk::DescriptorPool descriptor_pool{}; + vk::DescriptorSets descriptor_sets{}; + + vk::Buffer buffer{}; + std::vector<vk::Image> raw_images{}; + std::vector<vk::ImageView> raw_image_views{}; + u32 raw_width{}; + u32 raw_height{}; + Service::android::PixelFormat pixel_format{}; + + Settings::AntiAliasing anti_alias_setting{}; + std::unique_ptr<AntiAliasPass> anti_alias{}; + + std::unique_ptr<FSR> fsr{}; + std::vector<u64> resource_ticks{}; +}; + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/present_push_constants.h b/src/video_core/renderer_vulkan/present/present_push_constants.h new file mode 100644 index 000000000..f1949e7aa --- /dev/null +++ b/src/video_core/renderer_vulkan/present/present_push_constants.h @@ -0,0 +1,34 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/common_types.h" + +namespace Vulkan { + +struct ScreenRectVertex { + ScreenRectVertex() = default; + explicit ScreenRectVertex(f32 x, f32 y, f32 u, f32 v) : position{{x, y}}, tex_coord{{u, v}} {} + + std::array<f32, 2> position; + std::array<f32, 2> tex_coord; +}; + +static inline std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) { + // clang-format off + return { 2.f / width, 0.f, 0.f, 0.f, + 0.f, 2.f / height, 0.f, 0.f, + 0.f, 0.f, 1.f, 0.f, + -1.f, -1.f, 0.f, 1.f}; + // clang-format on +} + +struct PresentPushConstants { + std::array<f32, 4 * 4> modelview_matrix; + std::array<ScreenRectVertex, 4> vertices; +}; + +static_assert(sizeof(PresentPushConstants) <= 128, "Push constants are too large"); + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/smaa.cpp b/src/video_core/renderer_vulkan/present/smaa.cpp new file mode 100644 index 000000000..39645fd1d --- /dev/null +++ b/src/video_core/renderer_vulkan/present/smaa.cpp @@ -0,0 +1,277 @@ +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <list> + +#include "common/assert.h" +#include "common/polyfill_ranges.h" + +#include "video_core/renderer_vulkan/present/smaa.h" +#include "video_core/renderer_vulkan/present/util.h" +#include "video_core/renderer_vulkan/vk_scheduler.h" +#include "video_core/renderer_vulkan/vk_shader_util.h" +#include "video_core/smaa_area_tex.h" +#include "video_core/smaa_search_tex.h" +#include "video_core/vulkan_common/vulkan_device.h" + +#include "video_core/host_shaders/smaa_blending_weight_calculation_frag_spv.h" +#include "video_core/host_shaders/smaa_blending_weight_calculation_vert_spv.h" +#include "video_core/host_shaders/smaa_edge_detection_frag_spv.h" +#include "video_core/host_shaders/smaa_edge_detection_vert_spv.h" +#include "video_core/host_shaders/smaa_neighborhood_blending_frag_spv.h" +#include "video_core/host_shaders/smaa_neighborhood_blending_vert_spv.h" + +namespace Vulkan { + +SMAA::SMAA(const Device& device, MemoryAllocator& allocator, size_t image_count, VkExtent2D extent) + : m_device(device), m_allocator(allocator), m_extent(extent), + m_image_count(static_cast<u32>(image_count)) { + CreateImages(); + CreateRenderPasses(); + CreateSampler(); + CreateShaders(); + CreateDescriptorPool(); + CreateDescriptorSetLayouts(); + CreateDescriptorSets(); + CreatePipelineLayouts(); + CreatePipelines(); +} + +SMAA::~SMAA() = default; + +void SMAA::CreateImages() { + static constexpr VkExtent2D area_extent{AREATEX_WIDTH, AREATEX_HEIGHT}; + static constexpr VkExtent2D search_extent{SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT}; + + m_static_images[Area] = CreateWrappedImage(m_allocator, area_extent, VK_FORMAT_R8G8_UNORM); + m_static_images[Search] = CreateWrappedImage(m_allocator, search_extent, VK_FORMAT_R8_UNORM); + + m_static_image_views[Area] = + CreateWrappedImageView(m_device, m_static_images[Area], VK_FORMAT_R8G8_UNORM); + m_static_image_views[Search] = + CreateWrappedImageView(m_device, m_static_images[Search], VK_FORMAT_R8_UNORM); + + for (u32 i = 0; i < m_image_count; i++) { + Images& images = m_dynamic_images.emplace_back(); + + images.images[Blend] = + CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT); + images.images[Edges] = CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16_SFLOAT); + images.images[Output] = + CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT); + + images.image_views[Blend] = + CreateWrappedImageView(m_device, images.images[Blend], VK_FORMAT_R16G16B16A16_SFLOAT); + images.image_views[Edges] = + CreateWrappedImageView(m_device, images.images[Edges], VK_FORMAT_R16G16_SFLOAT); + images.image_views[Output] = + CreateWrappedImageView(m_device, images.images[Output], VK_FORMAT_R16G16B16A16_SFLOAT); + } +} + +void SMAA::CreateRenderPasses() { + m_renderpasses[EdgeDetection] = CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16_SFLOAT); + m_renderpasses[BlendingWeightCalculation] = + CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16B16A16_SFLOAT); + m_renderpasses[NeighborhoodBlending] = + CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16B16A16_SFLOAT); + + for (auto& images : m_dynamic_images) { + images.framebuffers[EdgeDetection] = CreateWrappedFramebuffer( + m_device, m_renderpasses[EdgeDetection], images.image_views[Edges], m_extent); + + images.framebuffers[BlendingWeightCalculation] = + CreateWrappedFramebuffer(m_device, m_renderpasses[BlendingWeightCalculation], + images.image_views[Blend], m_extent); + + images.framebuffers[NeighborhoodBlending] = CreateWrappedFramebuffer( + m_device, m_renderpasses[NeighborhoodBlending], images.image_views[Output], m_extent); + } +} + +void SMAA::CreateSampler() { + m_sampler = CreateWrappedSampler(m_device); +} + +void SMAA::CreateShaders() { + // These match the order of the SMAAStage enum + static constexpr std::array vert_shader_sources{ + ARRAY_TO_SPAN(SMAA_EDGE_DETECTION_VERT_SPV), + ARRAY_TO_SPAN(SMAA_BLENDING_WEIGHT_CALCULATION_VERT_SPV), + ARRAY_TO_SPAN(SMAA_NEIGHBORHOOD_BLENDING_VERT_SPV), + }; + static constexpr std::array frag_shader_sources{ + ARRAY_TO_SPAN(SMAA_EDGE_DETECTION_FRAG_SPV), + ARRAY_TO_SPAN(SMAA_BLENDING_WEIGHT_CALCULATION_FRAG_SPV), + ARRAY_TO_SPAN(SMAA_NEIGHBORHOOD_BLENDING_FRAG_SPV), + }; + + for (size_t i = 0; i < MaxSMAAStage; i++) { + m_vertex_shaders[i] = CreateWrappedShaderModule(m_device, vert_shader_sources[i]); + m_fragment_shaders[i] = CreateWrappedShaderModule(m_device, frag_shader_sources[i]); + } +} + +void SMAA::CreateDescriptorPool() { + // Edge detection: 1 descriptor + // Blending weight calculation: 3 descriptors + // Neighborhood blending: 2 descriptors + + // 6 descriptors, 3 descriptor sets per image + m_descriptor_pool = CreateWrappedDescriptorPool(m_device, 6 * m_image_count, 3 * m_image_count); +} + +void SMAA::CreateDescriptorSetLayouts() { + m_descriptor_set_layouts[EdgeDetection] = + CreateWrappedDescriptorSetLayout(m_device, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER}); + m_descriptor_set_layouts[BlendingWeightCalculation] = + CreateWrappedDescriptorSetLayout(m_device, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER}); + m_descriptor_set_layouts[NeighborhoodBlending] = + CreateWrappedDescriptorSetLayout(m_device, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER}); +} + +void SMAA::CreateDescriptorSets() { + std::vector<VkDescriptorSetLayout> layouts(m_descriptor_set_layouts.size()); + std::ranges::transform(m_descriptor_set_layouts, layouts.begin(), + [](auto& layout) { return *layout; }); + + for (auto& images : m_dynamic_images) { + images.descriptor_sets = CreateWrappedDescriptorSets(m_descriptor_pool, layouts); + } +} + +void SMAA::CreatePipelineLayouts() { + for (size_t i = 0; i < MaxSMAAStage; i++) { + m_pipeline_layouts[i] = CreateWrappedPipelineLayout(m_device, m_descriptor_set_layouts[i]); + } +} + +void SMAA::CreatePipelines() { + for (size_t i = 0; i < MaxSMAAStage; i++) { + m_pipelines[i] = + CreateWrappedPipeline(m_device, m_renderpasses[i], m_pipeline_layouts[i], + std::tie(m_vertex_shaders[i], m_fragment_shaders[i])); + } +} + +void SMAA::UpdateDescriptorSets(VkImageView image_view, size_t image_index) { + Images& images = m_dynamic_images[image_index]; + std::vector<VkDescriptorImageInfo> image_infos; + std::vector<VkWriteDescriptorSet> updates; + image_infos.reserve(6); + + updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, image_view, + images.descriptor_sets[EdgeDetection], 0)); + + updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, *images.image_views[Edges], + images.descriptor_sets[BlendingWeightCalculation], + 0)); + updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, *m_static_image_views[Area], + images.descriptor_sets[BlendingWeightCalculation], + 1)); + updates.push_back( + CreateWriteDescriptorSet(image_infos, *m_sampler, *m_static_image_views[Search], + images.descriptor_sets[BlendingWeightCalculation], 2)); + + updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, image_view, + images.descriptor_sets[NeighborhoodBlending], 0)); + updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, *images.image_views[Blend], + images.descriptor_sets[NeighborhoodBlending], 1)); + + m_device.GetLogical().UpdateDescriptorSets(updates, {}); +} + +void SMAA::UploadImages(Scheduler& scheduler) { + if (m_images_ready) { + return; + } + + static constexpr VkExtent2D area_extent{AREATEX_WIDTH, AREATEX_HEIGHT}; + static constexpr VkExtent2D search_extent{SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT}; + + UploadImage(m_device, m_allocator, scheduler, m_static_images[Area], area_extent, + VK_FORMAT_R8G8_UNORM, ARRAY_TO_SPAN(areaTexBytes)); + UploadImage(m_device, m_allocator, scheduler, m_static_images[Search], search_extent, + VK_FORMAT_R8_UNORM, ARRAY_TO_SPAN(searchTexBytes)); + + scheduler.Record([&](vk::CommandBuffer cmdbuf) { + for (auto& images : m_dynamic_images) { + for (size_t i = 0; i < MaxDynamicImage; i++) { + ClearColorImage(cmdbuf, *images.images[i]); + } + } + }); + scheduler.Finish(); + + m_images_ready = true; +} + +void SMAA::Draw(Scheduler& scheduler, size_t image_index, VkImage* inout_image, + VkImageView* inout_image_view) { + Images& images = m_dynamic_images[image_index]; + + VkImage input_image = *inout_image; + VkImage output_image = *images.images[Output]; + VkImage edges_image = *images.images[Edges]; + VkImage blend_image = *images.images[Blend]; + + VkDescriptorSet edge_detection_descriptor_set = images.descriptor_sets[EdgeDetection]; + VkDescriptorSet blending_weight_calculation_descriptor_set = + images.descriptor_sets[BlendingWeightCalculation]; + VkDescriptorSet neighborhood_blending_descriptor_set = + images.descriptor_sets[NeighborhoodBlending]; + + VkFramebuffer edge_detection_framebuffer = *images.framebuffers[EdgeDetection]; + VkFramebuffer blending_weight_calculation_framebuffer = + *images.framebuffers[BlendingWeightCalculation]; + VkFramebuffer neighborhood_blending_framebuffer = *images.framebuffers[NeighborhoodBlending]; + + UploadImages(scheduler); + UpdateDescriptorSets(*inout_image_view, image_index); + + scheduler.RequestOutsideRenderPassOperationContext(); + scheduler.Record([=, this](vk::CommandBuffer cmdbuf) { + TransitionImageLayout(cmdbuf, input_image, VK_IMAGE_LAYOUT_GENERAL); + TransitionImageLayout(cmdbuf, edges_image, VK_IMAGE_LAYOUT_GENERAL); + BeginRenderPass(cmdbuf, *m_renderpasses[EdgeDetection], edge_detection_framebuffer, + m_extent); + cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelines[EdgeDetection]); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, + *m_pipeline_layouts[EdgeDetection], 0, + edge_detection_descriptor_set, {}); + cmdbuf.Draw(3, 1, 0, 0); + cmdbuf.EndRenderPass(); + + TransitionImageLayout(cmdbuf, edges_image, VK_IMAGE_LAYOUT_GENERAL); + TransitionImageLayout(cmdbuf, blend_image, VK_IMAGE_LAYOUT_GENERAL); + BeginRenderPass(cmdbuf, *m_renderpasses[BlendingWeightCalculation], + blending_weight_calculation_framebuffer, m_extent); + cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, + *m_pipelines[BlendingWeightCalculation]); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, + *m_pipeline_layouts[BlendingWeightCalculation], 0, + blending_weight_calculation_descriptor_set, {}); + cmdbuf.Draw(3, 1, 0, 0); + cmdbuf.EndRenderPass(); + + TransitionImageLayout(cmdbuf, blend_image, VK_IMAGE_LAYOUT_GENERAL); + TransitionImageLayout(cmdbuf, output_image, VK_IMAGE_LAYOUT_GENERAL); + BeginRenderPass(cmdbuf, *m_renderpasses[NeighborhoodBlending], + neighborhood_blending_framebuffer, m_extent); + cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelines[NeighborhoodBlending]); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, + *m_pipeline_layouts[NeighborhoodBlending], 0, + neighborhood_blending_descriptor_set, {}); + cmdbuf.Draw(3, 1, 0, 0); + cmdbuf.EndRenderPass(); + TransitionImageLayout(cmdbuf, output_image, VK_IMAGE_LAYOUT_GENERAL); + }); + + *inout_image = *images.images[Output]; + *inout_image_view = *images.image_views[Output]; +} + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_smaa.h b/src/video_core/renderer_vulkan/present/smaa.h index 0e214258a..fdf6def07 100644 --- a/src/video_core/renderer_vulkan/vk_smaa.h +++ b/src/video_core/renderer_vulkan/present/smaa.h @@ -4,6 +4,7 @@ #pragma once #include <array> +#include "video_core/renderer_vulkan/present/anti_alias_pass.h" #include "video_core/vulkan_common/vulkan_memory_allocator.h" #include "video_core/vulkan_common/vulkan_wrapper.h" @@ -13,12 +14,14 @@ class Device; class Scheduler; class StagingBufferPool; -class SMAA { +class SMAA final : public AntiAliasPass { public: explicit SMAA(const Device& device, MemoryAllocator& allocator, size_t image_count, VkExtent2D extent); - VkImageView Draw(Scheduler& scheduler, size_t image_index, VkImage source_image, - VkImageView source_image_view); + ~SMAA() override; + + void Draw(Scheduler& scheduler, size_t image_index, VkImage* inout_image, + VkImageView* inout_image_view) override; private: enum SMAAStage { diff --git a/src/video_core/renderer_vulkan/vk_smaa.cpp b/src/video_core/renderer_vulkan/present/util.cpp index 70644ea82..6ee16595d 100644 --- a/src/video_core/renderer_vulkan/vk_smaa.cpp +++ b/src/video_core/renderer_vulkan/present/util.cpp @@ -1,29 +1,25 @@ -// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include <list> - #include "common/assert.h" #include "common/polyfill_ranges.h" - -#include "video_core/renderer_vulkan/vk_scheduler.h" -#include "video_core/renderer_vulkan/vk_shader_util.h" -#include "video_core/renderer_vulkan/vk_smaa.h" -#include "video_core/smaa_area_tex.h" -#include "video_core/smaa_search_tex.h" -#include "video_core/vulkan_common/vulkan_device.h" - -#include "video_core/host_shaders/smaa_blending_weight_calculation_frag_spv.h" -#include "video_core/host_shaders/smaa_blending_weight_calculation_vert_spv.h" -#include "video_core/host_shaders/smaa_edge_detection_frag_spv.h" -#include "video_core/host_shaders/smaa_edge_detection_vert_spv.h" -#include "video_core/host_shaders/smaa_neighborhood_blending_frag_spv.h" -#include "video_core/host_shaders/smaa_neighborhood_blending_vert_spv.h" +#include "video_core/renderer_vulkan/present/util.h" namespace Vulkan { -namespace { -#define ARRAY_TO_SPAN(a) std::span(a, (sizeof(a) / sizeof(a[0]))) +vk::Buffer CreateWrappedBuffer(MemoryAllocator& allocator, VkDeviceSize size, MemoryUsage usage) { + const VkBufferCreateInfo dst_buffer_info{ + .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .size = size, + .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + .sharingMode = VK_SHARING_MODE_EXCLUSIVE, + .queueFamilyIndexCount = 0, + .pQueueFamilyIndices = nullptr, + }; + return allocator.CreateBuffer(dst_buffer_info, usage); +} vk::Image CreateWrappedImage(MemoryAllocator& allocator, VkExtent2D dimensions, VkFormat format) { const VkImageCreateInfo image_ci{ @@ -48,7 +44,7 @@ vk::Image CreateWrappedImage(MemoryAllocator& allocator, VkExtent2D dimensions, } void TransitionImageLayout(vk::CommandBuffer& cmdbuf, VkImage image, VkImageLayout target_layout, - VkImageLayout source_layout = VK_IMAGE_LAYOUT_GENERAL) { + VkImageLayout source_layout) { constexpr VkFlags flags{VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT}; const VkImageMemoryBarrier barrier{ @@ -75,7 +71,7 @@ void TransitionImageLayout(vk::CommandBuffer& cmdbuf, VkImage image, VkImageLayo void UploadImage(const Device& device, MemoryAllocator& allocator, Scheduler& scheduler, vk::Image& image, VkExtent2D dimensions, VkFormat format, - std::span<const u8> initial_contents = {}) { + std::span<const u8> initial_contents) { const VkBufferCreateInfo upload_ci = { .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, .pNext = nullptr, @@ -114,6 +110,70 @@ void UploadImage(const Device& device, MemoryAllocator& allocator, Scheduler& sc scheduler.Finish(); } +void DownloadColorImage(vk::CommandBuffer& cmdbuf, VkImage image, VkBuffer buffer, + VkExtent3D extent) { + const VkImageMemoryBarrier read_barrier{ + .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + .pNext = nullptr, + .srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT, + .dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT, + .oldLayout = VK_IMAGE_LAYOUT_GENERAL, + .newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .image = image, + .subresourceRange{ + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .baseMipLevel = 0, + .levelCount = VK_REMAINING_MIP_LEVELS, + .baseArrayLayer = 0, + .layerCount = VK_REMAINING_ARRAY_LAYERS, + }, + }; + const VkImageMemoryBarrier image_write_barrier{ + .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + .pNext = nullptr, + .srcAccessMask = 0, + .dstAccessMask = VK_ACCESS_MEMORY_WRITE_BIT, + .oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + .newLayout = VK_IMAGE_LAYOUT_GENERAL, + .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .image = image, + .subresourceRange{ + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .baseMipLevel = 0, + .levelCount = VK_REMAINING_MIP_LEVELS, + .baseArrayLayer = 0, + .layerCount = VK_REMAINING_ARRAY_LAYERS, + }, + }; + static constexpr VkMemoryBarrier memory_write_barrier{ + .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, + .pNext = nullptr, + .srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT, + .dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, + }; + const VkBufferImageCopy copy{ + .bufferOffset = 0, + .bufferRowLength = 0, + .bufferImageHeight = 0, + .imageSubresource{ + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .mipLevel = 0, + .baseArrayLayer = 0, + .layerCount = 1, + }, + .imageOffset{.x = 0, .y = 0, .z = 0}, + .imageExtent{extent}, + }; + cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, + read_barrier); + cmdbuf.CopyImageToBuffer(image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, buffer, copy); + cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, + memory_write_barrier, nullptr, image_write_barrier); +} + vk::ImageView CreateWrappedImageView(const Device& device, vk::Image& image, VkFormat format) { return device.GetLogical().CreateImageView(VkImageViewCreateInfo{ .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, @@ -131,16 +191,18 @@ vk::ImageView CreateWrappedImageView(const Device& device, vk::Image& image, VkF }); } -vk::RenderPass CreateWrappedRenderPass(const Device& device, VkFormat format) { +vk::RenderPass CreateWrappedRenderPass(const Device& device, VkFormat format, + VkImageLayout initial_layout) { const VkAttachmentDescription attachment{ .flags = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT, .format = format, .samples = VK_SAMPLE_COUNT_1_BIT, - .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .loadOp = initial_layout == VK_IMAGE_LAYOUT_UNDEFINED ? VK_ATTACHMENT_LOAD_OP_DONT_CARE + : VK_ATTACHMENT_LOAD_OP_LOAD, .storeOp = VK_ATTACHMENT_STORE_OP_STORE, .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD, .stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE, - .initialLayout = VK_IMAGE_LAYOUT_GENERAL, + .initialLayout = initial_layout, .finalLayout = VK_IMAGE_LAYOUT_GENERAL, }; @@ -200,13 +262,13 @@ vk::Framebuffer CreateWrappedFramebuffer(const Device& device, vk::RenderPass& r }); } -vk::Sampler CreateWrappedSampler(const Device& device) { +vk::Sampler CreateWrappedSampler(const Device& device, VkFilter filter) { return device.GetLogical().CreateSampler(VkSamplerCreateInfo{ .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, .pNext = nullptr, .flags = 0, - .magFilter = VK_FILTER_LINEAR, - .minFilter = VK_FILTER_LINEAR, + .magFilter = filter, + .minFilter = filter, .mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR, .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, @@ -233,30 +295,34 @@ vk::ShaderModule CreateWrappedShaderModule(const Device& device, std::span<const }); } -vk::DescriptorPool CreateWrappedDescriptorPool(const Device& device, u32 max_descriptors, - u32 max_sets) { - const VkDescriptorPoolSize pool_size{ - .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = static_cast<u32>(max_descriptors), - }; +vk::DescriptorPool CreateWrappedDescriptorPool(const Device& device, size_t max_descriptors, + size_t max_sets, + std::initializer_list<VkDescriptorType> types) { + std::vector<VkDescriptorPoolSize> pool_sizes(types.size()); + for (u32 i = 0; i < types.size(); i++) { + pool_sizes[i] = VkDescriptorPoolSize{ + .type = std::data(types)[i], + .descriptorCount = static_cast<u32>(max_descriptors), + }; + } return device.GetLogical().CreateDescriptorPool(VkDescriptorPoolCreateInfo{ .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .pNext = nullptr, .flags = 0, - .maxSets = max_sets, - .poolSizeCount = 1, - .pPoolSizes = &pool_size, + .maxSets = static_cast<u32>(max_sets), + .poolSizeCount = static_cast<u32>(pool_sizes.size()), + .pPoolSizes = pool_sizes.data(), }); } -vk::DescriptorSetLayout CreateWrappedDescriptorSetLayout(const Device& device, - u32 max_sampler_bindings) { - std::vector<VkDescriptorSetLayoutBinding> bindings(max_sampler_bindings); - for (u32 i = 0; i < max_sampler_bindings; i++) { +vk::DescriptorSetLayout CreateWrappedDescriptorSetLayout( + const Device& device, std::initializer_list<VkDescriptorType> types) { + std::vector<VkDescriptorSetLayoutBinding> bindings(types.size()); + for (size_t i = 0; i < types.size(); i++) { bindings[i] = { - .binding = i, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + .binding = static_cast<u32>(i), + .descriptorType = std::data(types)[i], .descriptorCount = 1, .stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, .pImmutableSamplers = nullptr, @@ -298,7 +364,8 @@ vk::PipelineLayout CreateWrappedPipelineLayout(const Device& device, vk::Pipeline CreateWrappedPipeline(const Device& device, vk::RenderPass& renderpass, vk::PipelineLayout& layout, - std::tuple<vk::ShaderModule&, vk::ShaderModule&> shaders) { + std::tuple<vk::ShaderModule&, vk::ShaderModule&> shaders, + bool enable_blending) { const std::array<VkPipelineShaderStageCreateInfo, 2> shader_stages{{ { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, @@ -376,7 +443,7 @@ vk::Pipeline CreateWrappedPipeline(const Device& device, vk::RenderPass& renderp .alphaToOneEnable = VK_FALSE, }; - constexpr VkPipelineColorBlendAttachmentState color_blend_attachment{ + constexpr VkPipelineColorBlendAttachmentState color_blend_attachment_disabled{ .blendEnable = VK_FALSE, .srcColorBlendFactor = VK_BLEND_FACTOR_ZERO, .dstColorBlendFactor = VK_BLEND_FACTOR_ZERO, @@ -388,6 +455,18 @@ vk::Pipeline CreateWrappedPipeline(const Device& device, vk::RenderPass& renderp VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT, }; + constexpr VkPipelineColorBlendAttachmentState color_blend_attachment_enabled{ + .blendEnable = VK_TRUE, + .srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA, + .dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, + .colorBlendOp = VK_BLEND_OP_ADD, + .srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE, + .dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO, + .alphaBlendOp = VK_BLEND_OP_ADD, + .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | + VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT, + }; + const VkPipelineColorBlendStateCreateInfo color_blend_ci{ .sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, .pNext = nullptr, @@ -395,7 +474,8 @@ vk::Pipeline CreateWrappedPipeline(const Device& device, vk::RenderPass& renderp .logicOpEnable = VK_FALSE, .logicOp = VK_LOGIC_OP_COPY, .attachmentCount = 1, - .pAttachments = &color_blend_attachment, + .pAttachments = + enable_blending ? &color_blend_attachment_enabled : &color_blend_attachment_disabled, .blendConstants = {0.0f, 0.0f, 0.0f, 0.0f}, }; @@ -459,6 +539,56 @@ VkWriteDescriptorSet CreateWriteDescriptorSet(std::vector<VkDescriptorImageInfo> }; } +vk::Sampler CreateBilinearSampler(const Device& device) { + const VkSamplerCreateInfo ci{ + .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .magFilter = VK_FILTER_LINEAR, + .minFilter = VK_FILTER_LINEAR, + .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST, + .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + .mipLodBias = 0.0f, + .anisotropyEnable = VK_FALSE, + .maxAnisotropy = 0.0f, + .compareEnable = VK_FALSE, + .compareOp = VK_COMPARE_OP_NEVER, + .minLod = 0.0f, + .maxLod = 0.0f, + .borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, + .unnormalizedCoordinates = VK_FALSE, + }; + + return device.GetLogical().CreateSampler(ci); +} + +vk::Sampler CreateNearestNeighborSampler(const Device& device) { + const VkSamplerCreateInfo ci_nn{ + .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .magFilter = VK_FILTER_NEAREST, + .minFilter = VK_FILTER_NEAREST, + .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST, + .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + .mipLodBias = 0.0f, + .anisotropyEnable = VK_FALSE, + .maxAnisotropy = 0.0f, + .compareEnable = VK_FALSE, + .compareOp = VK_COMPARE_OP_NEVER, + .minLod = 0.0f, + .maxLod = 0.0f, + .borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, + .unnormalizedCoordinates = VK_FALSE, + }; + + return device.GetLogical().CreateSampler(ci_nn); +} + void ClearColorImage(vk::CommandBuffer& cmdbuf, VkImage image) { static constexpr std::array<VkImageSubresourceRange, 1> subresources{{{ .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, @@ -471,12 +601,12 @@ void ClearColorImage(vk::CommandBuffer& cmdbuf, VkImage image) { cmdbuf.ClearColorImage(image, VK_IMAGE_LAYOUT_GENERAL, {}, subresources); } -void BeginRenderPass(vk::CommandBuffer& cmdbuf, vk::RenderPass& render_pass, - VkFramebuffer framebuffer, VkExtent2D extent) { +void BeginRenderPass(vk::CommandBuffer& cmdbuf, VkRenderPass render_pass, VkFramebuffer framebuffer, + VkExtent2D extent) { const VkRenderPassBeginInfo renderpass_bi{ .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, .pNext = nullptr, - .renderPass = *render_pass, + .renderPass = render_pass, .framebuffer = framebuffer, .renderArea{ .offset{}, @@ -503,248 +633,4 @@ void BeginRenderPass(vk::CommandBuffer& cmdbuf, vk::RenderPass& render_pass, cmdbuf.SetScissor(0, scissor); } -} // Anonymous namespace - -SMAA::SMAA(const Device& device, MemoryAllocator& allocator, size_t image_count, VkExtent2D extent) - : m_device(device), m_allocator(allocator), m_extent(extent), - m_image_count(static_cast<u32>(image_count)) { - CreateImages(); - CreateRenderPasses(); - CreateSampler(); - CreateShaders(); - CreateDescriptorPool(); - CreateDescriptorSetLayouts(); - CreateDescriptorSets(); - CreatePipelineLayouts(); - CreatePipelines(); -} - -void SMAA::CreateImages() { - static constexpr VkExtent2D area_extent{AREATEX_WIDTH, AREATEX_HEIGHT}; - static constexpr VkExtent2D search_extent{SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT}; - - m_static_images[Area] = CreateWrappedImage(m_allocator, area_extent, VK_FORMAT_R8G8_UNORM); - m_static_images[Search] = CreateWrappedImage(m_allocator, search_extent, VK_FORMAT_R8_UNORM); - - m_static_image_views[Area] = - CreateWrappedImageView(m_device, m_static_images[Area], VK_FORMAT_R8G8_UNORM); - m_static_image_views[Search] = - CreateWrappedImageView(m_device, m_static_images[Search], VK_FORMAT_R8_UNORM); - - for (u32 i = 0; i < m_image_count; i++) { - Images& images = m_dynamic_images.emplace_back(); - - images.images[Blend] = - CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT); - images.images[Edges] = CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16_SFLOAT); - images.images[Output] = - CreateWrappedImage(m_allocator, m_extent, VK_FORMAT_R16G16B16A16_SFLOAT); - - images.image_views[Blend] = - CreateWrappedImageView(m_device, images.images[Blend], VK_FORMAT_R16G16B16A16_SFLOAT); - images.image_views[Edges] = - CreateWrappedImageView(m_device, images.images[Edges], VK_FORMAT_R16G16_SFLOAT); - images.image_views[Output] = - CreateWrappedImageView(m_device, images.images[Output], VK_FORMAT_R16G16B16A16_SFLOAT); - } -} - -void SMAA::CreateRenderPasses() { - m_renderpasses[EdgeDetection] = CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16_SFLOAT); - m_renderpasses[BlendingWeightCalculation] = - CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16B16A16_SFLOAT); - m_renderpasses[NeighborhoodBlending] = - CreateWrappedRenderPass(m_device, VK_FORMAT_R16G16B16A16_SFLOAT); - - for (auto& images : m_dynamic_images) { - images.framebuffers[EdgeDetection] = CreateWrappedFramebuffer( - m_device, m_renderpasses[EdgeDetection], images.image_views[Edges], m_extent); - - images.framebuffers[BlendingWeightCalculation] = - CreateWrappedFramebuffer(m_device, m_renderpasses[BlendingWeightCalculation], - images.image_views[Blend], m_extent); - - images.framebuffers[NeighborhoodBlending] = CreateWrappedFramebuffer( - m_device, m_renderpasses[NeighborhoodBlending], images.image_views[Output], m_extent); - } -} - -void SMAA::CreateSampler() { - m_sampler = CreateWrappedSampler(m_device); -} - -void SMAA::CreateShaders() { - // These match the order of the SMAAStage enum - static constexpr std::array vert_shader_sources{ - ARRAY_TO_SPAN(SMAA_EDGE_DETECTION_VERT_SPV), - ARRAY_TO_SPAN(SMAA_BLENDING_WEIGHT_CALCULATION_VERT_SPV), - ARRAY_TO_SPAN(SMAA_NEIGHBORHOOD_BLENDING_VERT_SPV), - }; - static constexpr std::array frag_shader_sources{ - ARRAY_TO_SPAN(SMAA_EDGE_DETECTION_FRAG_SPV), - ARRAY_TO_SPAN(SMAA_BLENDING_WEIGHT_CALCULATION_FRAG_SPV), - ARRAY_TO_SPAN(SMAA_NEIGHBORHOOD_BLENDING_FRAG_SPV), - }; - - for (size_t i = 0; i < MaxSMAAStage; i++) { - m_vertex_shaders[i] = CreateWrappedShaderModule(m_device, vert_shader_sources[i]); - m_fragment_shaders[i] = CreateWrappedShaderModule(m_device, frag_shader_sources[i]); - } -} - -void SMAA::CreateDescriptorPool() { - // Edge detection: 1 descriptor - // Blending weight calculation: 3 descriptors - // Neighborhood blending: 2 descriptors - - // 6 descriptors, 3 descriptor sets per image - m_descriptor_pool = CreateWrappedDescriptorPool(m_device, 6 * m_image_count, 3 * m_image_count); -} - -void SMAA::CreateDescriptorSetLayouts() { - m_descriptor_set_layouts[EdgeDetection] = CreateWrappedDescriptorSetLayout(m_device, 1); - m_descriptor_set_layouts[BlendingWeightCalculation] = - CreateWrappedDescriptorSetLayout(m_device, 3); - m_descriptor_set_layouts[NeighborhoodBlending] = CreateWrappedDescriptorSetLayout(m_device, 2); -} - -void SMAA::CreateDescriptorSets() { - std::vector<VkDescriptorSetLayout> layouts(m_descriptor_set_layouts.size()); - std::ranges::transform(m_descriptor_set_layouts, layouts.begin(), - [](auto& layout) { return *layout; }); - - for (auto& images : m_dynamic_images) { - images.descriptor_sets = CreateWrappedDescriptorSets(m_descriptor_pool, layouts); - } -} - -void SMAA::CreatePipelineLayouts() { - for (size_t i = 0; i < MaxSMAAStage; i++) { - m_pipeline_layouts[i] = CreateWrappedPipelineLayout(m_device, m_descriptor_set_layouts[i]); - } -} - -void SMAA::CreatePipelines() { - for (size_t i = 0; i < MaxSMAAStage; i++) { - m_pipelines[i] = - CreateWrappedPipeline(m_device, m_renderpasses[i], m_pipeline_layouts[i], - std::tie(m_vertex_shaders[i], m_fragment_shaders[i])); - } -} - -void SMAA::UpdateDescriptorSets(VkImageView image_view, size_t image_index) { - Images& images = m_dynamic_images[image_index]; - std::vector<VkDescriptorImageInfo> image_infos; - std::vector<VkWriteDescriptorSet> updates; - image_infos.reserve(6); - - updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, image_view, - images.descriptor_sets[EdgeDetection], 0)); - - updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, *images.image_views[Edges], - images.descriptor_sets[BlendingWeightCalculation], - 0)); - updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, *m_static_image_views[Area], - images.descriptor_sets[BlendingWeightCalculation], - 1)); - updates.push_back( - CreateWriteDescriptorSet(image_infos, *m_sampler, *m_static_image_views[Search], - images.descriptor_sets[BlendingWeightCalculation], 2)); - - updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, image_view, - images.descriptor_sets[NeighborhoodBlending], 0)); - updates.push_back(CreateWriteDescriptorSet(image_infos, *m_sampler, *images.image_views[Blend], - images.descriptor_sets[NeighborhoodBlending], 1)); - - m_device.GetLogical().UpdateDescriptorSets(updates, {}); -} - -void SMAA::UploadImages(Scheduler& scheduler) { - if (m_images_ready) { - return; - } - - static constexpr VkExtent2D area_extent{AREATEX_WIDTH, AREATEX_HEIGHT}; - static constexpr VkExtent2D search_extent{SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT}; - - UploadImage(m_device, m_allocator, scheduler, m_static_images[Area], area_extent, - VK_FORMAT_R8G8_UNORM, ARRAY_TO_SPAN(areaTexBytes)); - UploadImage(m_device, m_allocator, scheduler, m_static_images[Search], search_extent, - VK_FORMAT_R8_UNORM, ARRAY_TO_SPAN(searchTexBytes)); - - scheduler.Record([&](vk::CommandBuffer cmdbuf) { - for (auto& images : m_dynamic_images) { - for (size_t i = 0; i < MaxDynamicImage; i++) { - ClearColorImage(cmdbuf, *images.images[i]); - } - } - }); - scheduler.Finish(); - - m_images_ready = true; -} - -VkImageView SMAA::Draw(Scheduler& scheduler, size_t image_index, VkImage source_image, - VkImageView source_image_view) { - Images& images = m_dynamic_images[image_index]; - - VkImage output_image = *images.images[Output]; - VkImage edges_image = *images.images[Edges]; - VkImage blend_image = *images.images[Blend]; - - VkDescriptorSet edge_detection_descriptor_set = images.descriptor_sets[EdgeDetection]; - VkDescriptorSet blending_weight_calculation_descriptor_set = - images.descriptor_sets[BlendingWeightCalculation]; - VkDescriptorSet neighborhood_blending_descriptor_set = - images.descriptor_sets[NeighborhoodBlending]; - - VkFramebuffer edge_detection_framebuffer = *images.framebuffers[EdgeDetection]; - VkFramebuffer blending_weight_calculation_framebuffer = - *images.framebuffers[BlendingWeightCalculation]; - VkFramebuffer neighborhood_blending_framebuffer = *images.framebuffers[NeighborhoodBlending]; - - UploadImages(scheduler); - UpdateDescriptorSets(source_image_view, image_index); - - scheduler.RequestOutsideRenderPassOperationContext(); - scheduler.Record([=, this](vk::CommandBuffer cmdbuf) { - TransitionImageLayout(cmdbuf, source_image, VK_IMAGE_LAYOUT_GENERAL); - TransitionImageLayout(cmdbuf, edges_image, VK_IMAGE_LAYOUT_GENERAL); - BeginRenderPass(cmdbuf, m_renderpasses[EdgeDetection], edge_detection_framebuffer, - m_extent); - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelines[EdgeDetection]); - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, - *m_pipeline_layouts[EdgeDetection], 0, - edge_detection_descriptor_set, {}); - cmdbuf.Draw(3, 1, 0, 0); - cmdbuf.EndRenderPass(); - - TransitionImageLayout(cmdbuf, edges_image, VK_IMAGE_LAYOUT_GENERAL); - TransitionImageLayout(cmdbuf, blend_image, VK_IMAGE_LAYOUT_GENERAL); - BeginRenderPass(cmdbuf, m_renderpasses[BlendingWeightCalculation], - blending_weight_calculation_framebuffer, m_extent); - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, - *m_pipelines[BlendingWeightCalculation]); - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, - *m_pipeline_layouts[BlendingWeightCalculation], 0, - blending_weight_calculation_descriptor_set, {}); - cmdbuf.Draw(3, 1, 0, 0); - cmdbuf.EndRenderPass(); - - TransitionImageLayout(cmdbuf, blend_image, VK_IMAGE_LAYOUT_GENERAL); - TransitionImageLayout(cmdbuf, output_image, VK_IMAGE_LAYOUT_GENERAL); - BeginRenderPass(cmdbuf, m_renderpasses[NeighborhoodBlending], - neighborhood_blending_framebuffer, m_extent); - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelines[NeighborhoodBlending]); - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, - *m_pipeline_layouts[NeighborhoodBlending], 0, - neighborhood_blending_descriptor_set, {}); - cmdbuf.Draw(3, 1, 0, 0); - cmdbuf.EndRenderPass(); - TransitionImageLayout(cmdbuf, output_image, VK_IMAGE_LAYOUT_GENERAL); - }); - - return *images.image_views[Output]; -} - } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/util.h b/src/video_core/renderer_vulkan/present/util.h new file mode 100644 index 000000000..1104aaa15 --- /dev/null +++ b/src/video_core/renderer_vulkan/present/util.h @@ -0,0 +1,56 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "video_core/renderer_vulkan/vk_scheduler.h" +#include "video_core/vulkan_common/vulkan_memory_allocator.h" +#include "video_core/vulkan_common/vulkan_wrapper.h" + +namespace Vulkan { + +#define ARRAY_TO_SPAN(a) std::span(a, (sizeof(a) / sizeof(a[0]))) + +vk::Buffer CreateWrappedBuffer(MemoryAllocator& allocator, VkDeviceSize size, MemoryUsage usage); + +vk::Image CreateWrappedImage(MemoryAllocator& allocator, VkExtent2D dimensions, VkFormat format); +void TransitionImageLayout(vk::CommandBuffer& cmdbuf, VkImage image, VkImageLayout target_layout, + VkImageLayout source_layout = VK_IMAGE_LAYOUT_GENERAL); +void UploadImage(const Device& device, MemoryAllocator& allocator, Scheduler& scheduler, + vk::Image& image, VkExtent2D dimensions, VkFormat format, + std::span<const u8> initial_contents = {}); +void DownloadColorImage(vk::CommandBuffer& cmdbuf, VkImage image, VkBuffer buffer, + VkExtent3D extent); +void ClearColorImage(vk::CommandBuffer& cmdbuf, VkImage image); + +vk::ImageView CreateWrappedImageView(const Device& device, vk::Image& image, VkFormat format); +vk::RenderPass CreateWrappedRenderPass(const Device& device, VkFormat format, + VkImageLayout initial_layout = VK_IMAGE_LAYOUT_GENERAL); +vk::Framebuffer CreateWrappedFramebuffer(const Device& device, vk::RenderPass& render_pass, + vk::ImageView& dest_image, VkExtent2D extent); +vk::Sampler CreateWrappedSampler(const Device& device, VkFilter filter = VK_FILTER_LINEAR); +vk::ShaderModule CreateWrappedShaderModule(const Device& device, std::span<const u32> code); +vk::DescriptorPool CreateWrappedDescriptorPool(const Device& device, size_t max_descriptors, + size_t max_sets, + std::initializer_list<VkDescriptorType> types = { + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER}); +vk::DescriptorSetLayout CreateWrappedDescriptorSetLayout( + const Device& device, std::initializer_list<VkDescriptorType> types); +vk::DescriptorSets CreateWrappedDescriptorSets(vk::DescriptorPool& pool, + vk::Span<VkDescriptorSetLayout> layouts); +vk::PipelineLayout CreateWrappedPipelineLayout(const Device& device, + vk::DescriptorSetLayout& layout); +vk::Pipeline CreateWrappedPipeline(const Device& device, vk::RenderPass& renderpass, + vk::PipelineLayout& layout, + std::tuple<vk::ShaderModule&, vk::ShaderModule&> shaders, + bool enable_blending = false); +VkWriteDescriptorSet CreateWriteDescriptorSet(std::vector<VkDescriptorImageInfo>& images, + VkSampler sampler, VkImageView view, + VkDescriptorSet set, u32 binding); +vk::Sampler CreateBilinearSampler(const Device& device); +vk::Sampler CreateNearestNeighborSampler(const Device& device); + +void BeginRenderPass(vk::CommandBuffer& cmdbuf, VkRenderPass render_pass, VkFramebuffer framebuffer, + VkExtent2D extent); + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/window_adapt_pass.cpp b/src/video_core/renderer_vulkan/present/window_adapt_pass.cpp new file mode 100644 index 000000000..c5db0230d --- /dev/null +++ b/src/video_core/renderer_vulkan/present/window_adapt_pass.cpp @@ -0,0 +1,137 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/frontend/framebuffer_layout.h" +#include "video_core/framebuffer_config.h" +#include "video_core/host_shaders/vulkan_present_vert_spv.h" +#include "video_core/renderer_vulkan/present/layer.h" +#include "video_core/renderer_vulkan/present/present_push_constants.h" +#include "video_core/renderer_vulkan/present/util.h" +#include "video_core/renderer_vulkan/present/window_adapt_pass.h" +#include "video_core/renderer_vulkan/vk_present_manager.h" +#include "video_core/renderer_vulkan/vk_shader_util.h" +#include "video_core/vulkan_common/vulkan_device.h" +#include "video_core/vulkan_common/vulkan_memory_allocator.h" + +namespace Vulkan { + +WindowAdaptPass::WindowAdaptPass(const Device& device_, VkFormat frame_format, + vk::Sampler&& sampler_, vk::ShaderModule&& fragment_shader_) + : device(device_), sampler(std::move(sampler_)), fragment_shader(std::move(fragment_shader_)) { + CreateDescriptorSetLayout(); + CreatePipelineLayout(); + CreateVertexShader(); + CreateRenderPass(frame_format); + CreatePipeline(); +} + +WindowAdaptPass::~WindowAdaptPass() = default; + +void WindowAdaptPass::Draw(RasterizerVulkan& rasterizer, Scheduler& scheduler, size_t image_index, + std::list<Layer>& layers, + std::span<const Tegra::FramebufferConfig> configs, + const Layout::FramebufferLayout& layout, Frame* dst) { + + const VkFramebuffer host_framebuffer{*dst->framebuffer}; + const VkRenderPass renderpass{*render_pass}; + const VkPipeline graphics_pipeline{*pipeline}; + const VkPipelineLayout graphics_pipeline_layout{*pipeline_layout}; + const VkExtent2D render_area{ + .width = dst->width, + .height = dst->height, + }; + + const size_t layer_count = configs.size(); + std::vector<PresentPushConstants> push_constants(layer_count); + std::vector<VkDescriptorSet> descriptor_sets(layer_count); + + auto layer_it = layers.begin(); + for (size_t i = 0; i < layer_count; i++) { + layer_it->ConfigureDraw(&push_constants[i], &descriptor_sets[i], rasterizer, *sampler, + image_index, configs[i], layout); + layer_it++; + } + + scheduler.Record([=](vk::CommandBuffer cmdbuf) { + const f32 bg_red = Settings::values.bg_red.GetValue() / 255.0f; + const f32 bg_green = Settings::values.bg_green.GetValue() / 255.0f; + const f32 bg_blue = Settings::values.bg_blue.GetValue() / 255.0f; + const VkClearAttachment clear_attachment{ + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .colorAttachment = 0, + .clearValue = + { + .color = {.float32 = {bg_red, bg_green, bg_blue, 1.0f}}, + }, + }; + const VkClearRect clear_rect{ + .rect = + { + .offset = {0, 0}, + .extent = render_area, + }, + .baseArrayLayer = 0, + .layerCount = 1, + }; + + BeginRenderPass(cmdbuf, renderpass, host_framebuffer, render_area); + cmdbuf.ClearAttachments({clear_attachment}, {clear_rect}); + + cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, graphics_pipeline); + for (size_t i = 0; i < layer_count; i++) { + cmdbuf.PushConstants(graphics_pipeline_layout, VK_SHADER_STAGE_VERTEX_BIT, + push_constants[i]); + cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, graphics_pipeline_layout, 0, + descriptor_sets[i], {}); + cmdbuf.Draw(4, 1, 0, 0); + } + + cmdbuf.EndRenderPass(); + }); +} + +VkDescriptorSetLayout WindowAdaptPass::GetDescriptorSetLayout() { + return *descriptor_set_layout; +} + +VkRenderPass WindowAdaptPass::GetRenderPass() { + return *render_pass; +} + +void WindowAdaptPass::CreateDescriptorSetLayout() { + descriptor_set_layout = + CreateWrappedDescriptorSetLayout(device, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER}); +} + +void WindowAdaptPass::CreatePipelineLayout() { + const VkPushConstantRange range{ + .stageFlags = VK_SHADER_STAGE_VERTEX_BIT, + .offset = 0, + .size = sizeof(PresentPushConstants), + }; + + pipeline_layout = device.GetLogical().CreatePipelineLayout(VkPipelineLayoutCreateInfo{ + .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .setLayoutCount = 1, + .pSetLayouts = descriptor_set_layout.address(), + .pushConstantRangeCount = 1, + .pPushConstantRanges = &range, + }); +} + +void WindowAdaptPass::CreateVertexShader() { + vertex_shader = BuildShader(device, VULKAN_PRESENT_VERT_SPV); +} + +void WindowAdaptPass::CreateRenderPass(VkFormat frame_format) { + render_pass = CreateWrappedRenderPass(device, frame_format, VK_IMAGE_LAYOUT_UNDEFINED); +} + +void WindowAdaptPass::CreatePipeline() { + pipeline = CreateWrappedPipeline(device, render_pass, pipeline_layout, + std::tie(vertex_shader, fragment_shader), false); +} + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/present/window_adapt_pass.h b/src/video_core/renderer_vulkan/present/window_adapt_pass.h new file mode 100644 index 000000000..0e2edfc31 --- /dev/null +++ b/src/video_core/renderer_vulkan/present/window_adapt_pass.h @@ -0,0 +1,58 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <list> + +#include "common/math_util.h" +#include "video_core/vulkan_common/vulkan_wrapper.h" + +namespace Layout { +struct FramebufferLayout; +} + +namespace Tegra { +struct FramebufferConfig; +} + +namespace Vulkan { + +class Device; +struct Frame; +class Layer; +class Scheduler; +class RasterizerVulkan; + +class WindowAdaptPass final { +public: + explicit WindowAdaptPass(const Device& device, VkFormat frame_format, vk::Sampler&& sampler, + vk::ShaderModule&& fragment_shader); + ~WindowAdaptPass(); + + void Draw(RasterizerVulkan& rasterizer, Scheduler& scheduler, size_t image_index, + std::list<Layer>& layers, std::span<const Tegra::FramebufferConfig> configs, + const Layout::FramebufferLayout& layout, Frame* dst); + + VkDescriptorSetLayout GetDescriptorSetLayout(); + VkRenderPass GetRenderPass(); + +private: + void CreateDescriptorSetLayout(); + void CreatePipelineLayout(); + void CreateVertexShader(); + void CreateRenderPass(VkFormat frame_format); + void CreatePipeline(); + +private: + const Device& device; + vk::DescriptorSetLayout descriptor_set_layout; + vk::PipelineLayout pipeline_layout; + vk::Sampler sampler; + vk::ShaderModule vertex_shader; + vk::ShaderModule fragment_shader; + vk::RenderPass render_pass; + vk::Pipeline pipeline; +}; + +} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 1631276c6..48a105327 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -20,12 +20,14 @@ #include "core/frontend/graphics_context.h" #include "core/telemetry_session.h" #include "video_core/gpu.h" +#include "video_core/renderer_vulkan/present/util.h" #include "video_core/renderer_vulkan/renderer_vulkan.h" #include "video_core/renderer_vulkan/vk_blit_screen.h" #include "video_core/renderer_vulkan/vk_rasterizer.h" #include "video_core/renderer_vulkan/vk_scheduler.h" #include "video_core/renderer_vulkan/vk_state_tracker.h" #include "video_core/renderer_vulkan/vk_swapchain.h" +#include "video_core/textures/decoders.h" #include "video_core/vulkan_common/vulkan_debug_callback.h" #include "video_core/vulkan_common/vulkan_device.h" #include "video_core/vulkan_common/vulkan_instance.h" @@ -97,10 +99,10 @@ RendererVulkan::RendererVulkan(Core::TelemetrySession& telemetry_session_, render_window.GetFramebufferLayout().height), present_manager(instance, render_window, device, memory_allocator, scheduler, swapchain, surface), - blit_screen(device_memory, render_window, device, memory_allocator, swapchain, - present_manager, scheduler, screen_info), - rasterizer(render_window, gpu, device_memory, screen_info, device, memory_allocator, - state_tracker, scheduler) { + blit_swapchain(device_memory, device, memory_allocator, present_manager, scheduler), + blit_screenshot(device_memory, device, memory_allocator, present_manager, scheduler), + rasterizer(render_window, gpu, device_memory, device, memory_allocator, state_tracker, + scheduler) { if (Settings::values.renderer_force_max_clock.GetValue() && device.ShouldBoostClocks()) { turbo_mode.emplace(instance, dld); scheduler.RegisterOnSubmit([this] { turbo_mode->QueueSubmitted(); }); @@ -116,25 +118,22 @@ RendererVulkan::~RendererVulkan() { void(device.GetLogical().WaitIdle()); } -void RendererVulkan::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { - if (!framebuffer) { +void RendererVulkan::Composite(std::span<const Tegra::FramebufferConfig> framebuffers) { + if (framebuffers.empty()) { return; } + SCOPE_EXIT({ render_window.OnFrameDisplayed(); }); + if (!render_window.IsShown()) { return; } - // Update screen info if the framebuffer size has changed. - screen_info.width = framebuffer->width; - screen_info.height = framebuffer->height; - - const DAddr framebuffer_addr = framebuffer->address + framebuffer->offset; - const bool use_accelerated = - rasterizer.AccelerateDisplay(*framebuffer, framebuffer_addr, framebuffer->stride); - RenderScreenshot(*framebuffer, use_accelerated); + RenderScreenshot(framebuffers); Frame* frame = present_manager.GetRenderFrame(); - blit_screen.DrawToSwapchain(frame, *framebuffer, use_accelerated); + blit_swapchain.DrawToFrame(rasterizer, frame, framebuffers, + render_window.GetFramebufferLayout(), swapchain.GetImageCount(), + swapchain.GetImageViewFormat()); scheduler.Flush(*frame->render_ready); present_manager.Present(frame); @@ -168,143 +167,37 @@ void RendererVulkan::Report() const { telemetry_session.AddField(field, "GPU_Vulkan_Extensions", extensions); } -void Vulkan::RendererVulkan::RenderScreenshot(const Tegra::FramebufferConfig& framebuffer, - bool use_accelerated) { +void Vulkan::RendererVulkan::RenderScreenshot( + std::span<const Tegra::FramebufferConfig> framebuffers) { if (!renderer_settings.screenshot_requested) { return; } + + constexpr VkFormat ScreenshotFormat{VK_FORMAT_B8G8R8A8_UNORM}; const Layout::FramebufferLayout layout{renderer_settings.screenshot_framebuffer_layout}; - vk::Image staging_image = memory_allocator.CreateImage(VkImageCreateInfo{ - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .pNext = nullptr, - .flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, - .imageType = VK_IMAGE_TYPE_2D, - .format = VK_FORMAT_B8G8R8A8_UNORM, - .extent = - { - .width = layout.width, - .height = layout.height, - .depth = 1, - }, - .mipLevels = 1, - .arrayLayers = 1, - .samples = VK_SAMPLE_COUNT_1_BIT, - .tiling = VK_IMAGE_TILING_OPTIMAL, - .usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = nullptr, - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, - }); - const vk::ImageView dst_view = device.GetLogical().CreateImageView(VkImageViewCreateInfo{ - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .image = *staging_image, - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .format = VK_FORMAT_B8G8R8A8_UNORM, - .components{ - .r = VK_COMPONENT_SWIZZLE_IDENTITY, - .g = VK_COMPONENT_SWIZZLE_IDENTITY, - .b = VK_COMPONENT_SWIZZLE_IDENTITY, - .a = VK_COMPONENT_SWIZZLE_IDENTITY, - }, - .subresourceRange{ - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = VK_REMAINING_ARRAY_LAYERS, - }, - }); - const VkExtent2D render_area{.width = layout.width, .height = layout.height}; - const vk::Framebuffer screenshot_fb = blit_screen.CreateFramebuffer(*dst_view, render_area); - blit_screen.Draw(framebuffer, *screenshot_fb, layout, render_area, use_accelerated); + auto frame = [&]() { + Frame f{}; + f.image = CreateWrappedImage(memory_allocator, VkExtent2D{layout.width, layout.height}, + ScreenshotFormat); + f.image_view = CreateWrappedImageView(device, f.image, ScreenshotFormat); + f.framebuffer = blit_screenshot.CreateFramebuffer(layout, *f.image_view, ScreenshotFormat); + return f; + }(); - const auto buffer_size = static_cast<VkDeviceSize>(layout.width * layout.height * 4); - const VkBufferCreateInfo dst_buffer_info{ - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .size = buffer_size, - .usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = nullptr, - }; - const vk::Buffer dst_buffer = - memory_allocator.CreateBuffer(dst_buffer_info, MemoryUsage::Download); + blit_screenshot.DrawToFrame(rasterizer, &frame, framebuffers, layout, 1, + VK_FORMAT_B8G8R8A8_UNORM); + + const auto dst_buffer = CreateWrappedBuffer( + memory_allocator, static_cast<VkDeviceSize>(layout.width * layout.height * 4), + MemoryUsage::Download); scheduler.RequestOutsideRenderPassOperationContext(); scheduler.Record([&](vk::CommandBuffer cmdbuf) { - const VkImageMemoryBarrier read_barrier{ - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = nullptr, - .srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT, - .dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT, - .oldLayout = VK_IMAGE_LAYOUT_GENERAL, - .newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = *staging_image, - .subresourceRange{ - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = VK_REMAINING_MIP_LEVELS, - .baseArrayLayer = 0, - .layerCount = VK_REMAINING_ARRAY_LAYERS, - }, - }; - const VkImageMemoryBarrier image_write_barrier{ - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = nullptr, - .srcAccessMask = 0, - .dstAccessMask = VK_ACCESS_MEMORY_WRITE_BIT, - .oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - .newLayout = VK_IMAGE_LAYOUT_GENERAL, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = *staging_image, - .subresourceRange{ - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = VK_REMAINING_MIP_LEVELS, - .baseArrayLayer = 0, - .layerCount = VK_REMAINING_ARRAY_LAYERS, - }, - }; - static constexpr VkMemoryBarrier memory_write_barrier{ - .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, - .pNext = nullptr, - .srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT, - .dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, - }; - const VkBufferImageCopy copy{ - .bufferOffset = 0, - .bufferRowLength = 0, - .bufferImageHeight = 0, - .imageSubresource{ - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .mipLevel = 0, - .baseArrayLayer = 0, - .layerCount = 1, - }, - .imageOffset{.x = 0, .y = 0, .z = 0}, - .imageExtent{ - .width = layout.width, - .height = layout.height, - .depth = 1, - }, - }; - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, - 0, read_barrier); - cmdbuf.CopyImageToBuffer(*staging_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *dst_buffer, - copy); - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - 0, memory_write_barrier, nullptr, image_write_barrier); + DownloadColorImage(cmdbuf, *frame.image, *dst_buffer, + VkExtent3D{layout.width, layout.height, 1}); }); + // Ensure the copy is fully completed before saving the screenshot scheduler.Finish(); diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h index 11c52287a..c6d8a0f21 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.h +++ b/src/video_core/renderer_vulkan/renderer_vulkan.h @@ -46,7 +46,7 @@ public: std::unique_ptr<Core::Frontend::GraphicsContext> context_); ~RendererVulkan() override; - void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override; + void Composite(std::span<const Tegra::FramebufferConfig> framebuffers) override; VideoCore::RasterizerInterface* ReadRasterizer() override { return &rasterizer; @@ -59,7 +59,7 @@ public: private: void Report() const; - void RenderScreenshot(const Tegra::FramebufferConfig& framebuffer, bool use_accelerated); + void RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers); Core::TelemetrySession& telemetry_session; Tegra::MaxwellDeviceMemoryManager& device_memory; @@ -72,15 +72,14 @@ private: vk::DebugUtilsMessenger debug_messenger; vk::SurfaceKHR surface; - ScreenInfo screen_info; - Device device; MemoryAllocator memory_allocator; StateTracker state_tracker; Scheduler scheduler; Swapchain swapchain; PresentManager present_manager; - BlitScreen blit_screen; + BlitScreen blit_swapchain; + BlitScreen blit_screenshot; RasterizerVulkan rasterizer; std::optional<TurboMode> turbo_mode; }; diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp index 610f27c84..2275fcc46 100644 --- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp +++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp @@ -1,522 +1,143 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include <algorithm> -#include <array> -#include <cstring> -#include <memory> -#include <vector> - -#include "common/assert.h" -#include "common/common_types.h" -#include "common/math_util.h" -#include "common/polyfill_ranges.h" -#include "common/settings.h" -#include "core/core.h" -#include "core/frontend/emu_window.h" -#include "video_core/gpu.h" -#include "video_core/host1x/gpu_device_memory_manager.h" -#include "video_core/host_shaders/fxaa_frag_spv.h" -#include "video_core/host_shaders/fxaa_vert_spv.h" -#include "video_core/host_shaders/present_bicubic_frag_spv.h" -#include "video_core/host_shaders/present_gaussian_frag_spv.h" -#include "video_core/host_shaders/vulkan_present_frag_spv.h" -#include "video_core/host_shaders/vulkan_present_scaleforce_fp16_frag_spv.h" -#include "video_core/host_shaders/vulkan_present_scaleforce_fp32_frag_spv.h" -#include "video_core/host_shaders/vulkan_present_vert_spv.h" -#include "video_core/renderer_vulkan/renderer_vulkan.h" +#include "video_core/framebuffer_config.h" +#include "video_core/renderer_vulkan/present/filters.h" +#include "video_core/renderer_vulkan/present/layer.h" #include "video_core/renderer_vulkan/vk_blit_screen.h" -#include "video_core/renderer_vulkan/vk_fsr.h" +#include "video_core/renderer_vulkan/vk_present_manager.h" #include "video_core/renderer_vulkan/vk_scheduler.h" -#include "video_core/renderer_vulkan/vk_shader_util.h" -#include "video_core/renderer_vulkan/vk_smaa.h" -#include "video_core/renderer_vulkan/vk_swapchain.h" -#include "video_core/surface.h" -#include "video_core/textures/decoders.h" -#include "video_core/vulkan_common/vulkan_device.h" -#include "video_core/vulkan_common/vulkan_memory_allocator.h" -#include "video_core/vulkan_common/vulkan_wrapper.h" namespace Vulkan { -namespace { - -struct ScreenRectVertex { - ScreenRectVertex() = default; - explicit ScreenRectVertex(f32 x, f32 y, f32 u, f32 v) : position{{x, y}}, tex_coord{{u, v}} {} - - std::array<f32, 2> position; - std::array<f32, 2> tex_coord; - - static VkVertexInputBindingDescription GetDescription() { - return { - .binding = 0, - .stride = sizeof(ScreenRectVertex), - .inputRate = VK_VERTEX_INPUT_RATE_VERTEX, - }; - } - - static std::array<VkVertexInputAttributeDescription, 2> GetAttributes() { - return {{ - { - .location = 0, - .binding = 0, - .format = VK_FORMAT_R32G32_SFLOAT, - .offset = offsetof(ScreenRectVertex, position), - }, - { - .location = 1, - .binding = 0, - .format = VK_FORMAT_R32G32_SFLOAT, - .offset = offsetof(ScreenRectVertex, tex_coord), - }, - }}; - } -}; +BlitScreen::BlitScreen(Tegra::MaxwellDeviceMemoryManager& device_memory_, const Device& device_, + MemoryAllocator& memory_allocator_, PresentManager& present_manager_, + Scheduler& scheduler_) + : device_memory{device_memory_}, device{device_}, memory_allocator{memory_allocator_}, + present_manager{present_manager_}, scheduler{scheduler_}, image_count{1}, + swapchain_view_format{VK_FORMAT_B8G8R8A8_UNORM} {} -std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) { - // clang-format off - return { 2.f / width, 0.f, 0.f, 0.f, - 0.f, 2.f / height, 0.f, 0.f, - 0.f, 0.f, 1.f, 0.f, - -1.f, -1.f, 0.f, 1.f}; - // clang-format on -} - -u32 GetBytesPerPixel(const Tegra::FramebufferConfig& framebuffer) { - using namespace VideoCore::Surface; - return BytesPerBlock(PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)); -} +BlitScreen::~BlitScreen() = default; -std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) { - return static_cast<std::size_t>(framebuffer.stride) * - static_cast<std::size_t>(framebuffer.height) * GetBytesPerPixel(framebuffer); +void BlitScreen::WaitIdle() { + present_manager.WaitPresent(); + scheduler.Finish(); + device.GetLogical().WaitIdle(); } -VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) { - switch (framebuffer.pixel_format) { - case Service::android::PixelFormat::Rgba8888: - case Service::android::PixelFormat::Rgbx8888: - return VK_FORMAT_A8B8G8R8_UNORM_PACK32; - case Service::android::PixelFormat::Rgb565: - return VK_FORMAT_R5G6B5_UNORM_PACK16; - case Service::android::PixelFormat::Bgra8888: - return VK_FORMAT_B8G8R8A8_UNORM; +void BlitScreen::SetWindowAdaptPass() { + layers.clear(); + scaling_filter = Settings::values.scaling_filter.GetValue(); + + switch (scaling_filter) { + case Settings::ScalingFilter::NearestNeighbor: + window_adapt = MakeNearestNeighbor(device, swapchain_view_format); + break; + case Settings::ScalingFilter::Bicubic: + window_adapt = MakeBicubic(device, swapchain_view_format); + break; + case Settings::ScalingFilter::Gaussian: + window_adapt = MakeGaussian(device, swapchain_view_format); + break; + case Settings::ScalingFilter::ScaleForce: + window_adapt = MakeScaleForce(device, swapchain_view_format); + break; + case Settings::ScalingFilter::Fsr: + case Settings::ScalingFilter::Bilinear: default: - UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}", - static_cast<u32>(framebuffer.pixel_format)); - return VK_FORMAT_A8B8G8R8_UNORM_PACK32; + window_adapt = MakeBilinear(device, swapchain_view_format); + break; } } -} // Anonymous namespace - -struct BlitScreen::BufferData { - struct { - std::array<f32, 4 * 4> modelview_matrix; - } uniform; - - std::array<ScreenRectVertex, 4> vertices; - - // Unaligned image data goes here -}; - -BlitScreen::BlitScreen(Tegra::MaxwellDeviceMemoryManager& device_memory_, - Core::Frontend::EmuWindow& render_window_, const Device& device_, - MemoryAllocator& memory_allocator_, Swapchain& swapchain_, - PresentManager& present_manager_, Scheduler& scheduler_, - const ScreenInfo& screen_info_) - : device_memory{device_memory_}, render_window{render_window_}, device{device_}, - memory_allocator{memory_allocator_}, swapchain{swapchain_}, present_manager{present_manager_}, - scheduler{scheduler_}, image_count{swapchain.GetImageCount()}, screen_info{screen_info_} { - resource_ticks.resize(image_count); - swapchain_view_format = swapchain.GetImageViewFormat(); - - CreateStaticResources(); - CreateDynamicResources(); -} - -BlitScreen::~BlitScreen() = default; - -static Common::Rectangle<f32> NormalizeCrop(const Tegra::FramebufferConfig& framebuffer, - const ScreenInfo& screen_info) { - f32 left, top, right, bottom; - - if (!framebuffer.crop_rect.IsEmpty()) { - // If crop rectangle is not empty, apply properties from rectangle. - left = static_cast<f32>(framebuffer.crop_rect.left); - top = static_cast<f32>(framebuffer.crop_rect.top); - right = static_cast<f32>(framebuffer.crop_rect.right); - bottom = static_cast<f32>(framebuffer.crop_rect.bottom); - } else { - // Otherwise, fall back to framebuffer dimensions. - left = 0; - top = 0; - right = static_cast<f32>(framebuffer.width); - bottom = static_cast<f32>(framebuffer.height); - } - - // Apply transformation flags. - auto framebuffer_transform_flags = framebuffer.transform_flags; +void BlitScreen::DrawToFrame(RasterizerVulkan& rasterizer, Frame* frame, + std::span<const Tegra::FramebufferConfig> framebuffers, + const Layout::FramebufferLayout& layout, + size_t current_swapchain_image_count, + VkFormat current_swapchain_view_format) { + bool resource_update_required = false; + bool presentation_recreate_required = false; - if (True(framebuffer_transform_flags & Service::android::BufferTransformFlags::FlipH)) { - // Switch left and right. - std::swap(left, right); - } - if (True(framebuffer_transform_flags & Service::android::BufferTransformFlags::FlipV)) { - // Switch top and bottom. - std::swap(top, bottom); + // Recreate dynamic resources if the adapting filter changed + if (!window_adapt || scaling_filter != Settings::values.scaling_filter.GetValue()) { + resource_update_required = true; } - framebuffer_transform_flags &= ~Service::android::BufferTransformFlags::FlipH; - framebuffer_transform_flags &= ~Service::android::BufferTransformFlags::FlipV; - if (True(framebuffer_transform_flags)) { - UNIMPLEMENTED_MSG("Unsupported framebuffer_transform_flags={}", - static_cast<u32>(framebuffer_transform_flags)); + // Recreate dynamic resources if the image count changed + const size_t old_swapchain_image_count = + std::exchange(image_count, current_swapchain_image_count); + if (old_swapchain_image_count != current_swapchain_image_count) { + resource_update_required = true; } - // Get the screen properties. - const f32 screen_width = static_cast<f32>(screen_info.width); - const f32 screen_height = static_cast<f32>(screen_info.height); - - // Normalize coordinate space. - left /= screen_width; - top /= screen_height; - right /= screen_width; - bottom /= screen_height; - - return Common::Rectangle<f32>(left, top, right, bottom); -} - -void BlitScreen::Recreate() { - present_manager.WaitPresent(); - scheduler.Finish(); - device.GetLogical().WaitIdle(); - CreateDynamicResources(); -} - -void BlitScreen::Draw(const Tegra::FramebufferConfig& framebuffer, - const VkFramebuffer& host_framebuffer, const Layout::FramebufferLayout layout, - VkExtent2D render_area, bool use_accelerated) { - RefreshResources(framebuffer); - - // Finish any pending renderpass - scheduler.RequestOutsideRenderPassOperationContext(); - - scheduler.Wait(resource_ticks[image_index]); - resource_ticks[image_index] = scheduler.CurrentTick(); - - VkImage source_image = use_accelerated ? screen_info.image : *raw_images[image_index]; - VkImageView source_image_view = - use_accelerated ? screen_info.image_view : *raw_image_views[image_index]; - - BufferData data; - SetUniformData(data, layout); - SetVertexData(data, framebuffer, layout); - - const std::span<u8> mapped_span = buffer.Mapped(); - std::memcpy(mapped_span.data(), &data, sizeof(data)); - - if (!use_accelerated) { - const u64 image_offset = GetRawImageOffset(framebuffer); - - const DAddr framebuffer_addr = framebuffer.address + framebuffer.offset; - const u8* const host_ptr = device_memory.GetPointer<u8>(framebuffer_addr); - - // TODO(Rodrigo): Read this from HLE - constexpr u32 block_height_log2 = 4; - const u32 bytes_per_pixel = GetBytesPerPixel(framebuffer); - const u64 linear_size{GetSizeInBytes(framebuffer)}; - const u64 tiled_size{Tegra::Texture::CalculateSize(true, bytes_per_pixel, - framebuffer.stride, framebuffer.height, - 1, block_height_log2, 0)}; - Tegra::Texture::UnswizzleTexture( - mapped_span.subspan(image_offset, linear_size), std::span(host_ptr, tiled_size), - bytes_per_pixel, framebuffer.width, framebuffer.height, 1, block_height_log2, 0); - - const VkBufferImageCopy copy{ - .bufferOffset = image_offset, - .bufferRowLength = 0, - .bufferImageHeight = 0, - .imageSubresource = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .mipLevel = 0, - .baseArrayLayer = 0, - .layerCount = 1, - }, - .imageOffset = {.x = 0, .y = 0, .z = 0}, - .imageExtent = - { - .width = framebuffer.width, - .height = framebuffer.height, - .depth = 1, - }, - }; - scheduler.Record([this, copy, index = image_index](vk::CommandBuffer cmdbuf) { - const VkImage image = *raw_images[index]; - const VkImageMemoryBarrier base_barrier{ - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = nullptr, - .srcAccessMask = 0, - .dstAccessMask = 0, - .oldLayout = VK_IMAGE_LAYOUT_GENERAL, - .newLayout = VK_IMAGE_LAYOUT_GENERAL, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = image, - .subresourceRange{ - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }, - }; - VkImageMemoryBarrier read_barrier = base_barrier; - read_barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT; - read_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - read_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; - - VkImageMemoryBarrier write_barrier = base_barrier; - write_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - write_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, - read_barrier); - cmdbuf.CopyBufferToImage(*buffer, image, VK_IMAGE_LAYOUT_GENERAL, copy); - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | - VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - 0, write_barrier); - }); + // Recreate the presentation frame if the format or dimensions of the window changed + const VkFormat old_swapchain_view_format = + std::exchange(swapchain_view_format, current_swapchain_view_format); + if (old_swapchain_view_format != current_swapchain_view_format || + layout.width != frame->width || layout.height != frame->height) { + resource_update_required = true; + presentation_recreate_required = true; } - const auto anti_alias_pass = Settings::values.anti_aliasing.GetValue(); - if (use_accelerated && anti_alias_pass == Settings::AntiAliasing::Fxaa) { - UpdateAADescriptorSet(source_image_view, false); - const u32 up_scale = Settings::values.resolution_info.up_scale; - const u32 down_shift = Settings::values.resolution_info.down_shift; - VkExtent2D size{ - .width = (up_scale * framebuffer.width) >> down_shift, - .height = (up_scale * framebuffer.height) >> down_shift, - }; - scheduler.Record([this, index = image_index, size, - anti_alias_pass](vk::CommandBuffer cmdbuf) { - const VkImageMemoryBarrier base_barrier{ - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = nullptr, - .srcAccessMask = 0, - .dstAccessMask = 0, - .oldLayout = VK_IMAGE_LAYOUT_GENERAL, - .newLayout = VK_IMAGE_LAYOUT_GENERAL, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = {}, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }, - }; - - { - VkImageMemoryBarrier fsr_write_barrier = base_barrier; - fsr_write_barrier.image = *aa_image; - fsr_write_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, fsr_write_barrier); - } + // If we have a pending resource update, perform it + if (resource_update_required) { + // Wait for idle to ensure no resources are in use + WaitIdle(); - const f32 bg_red = Settings::values.bg_red.GetValue() / 255.0f; - const f32 bg_green = Settings::values.bg_green.GetValue() / 255.0f; - const f32 bg_blue = Settings::values.bg_blue.GetValue() / 255.0f; - const VkClearValue clear_color{ - .color = {.float32 = {bg_red, bg_green, bg_blue, 1.0f}}, - }; - const VkRenderPassBeginInfo renderpass_bi{ - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, - .pNext = nullptr, - .renderPass = *aa_renderpass, - .framebuffer = *aa_framebuffer, - .renderArea = - { - .offset = {0, 0}, - .extent = size, - }, - .clearValueCount = 1, - .pClearValues = &clear_color, - }; - const VkViewport viewport{ - .x = 0.0f, - .y = 0.0f, - .width = static_cast<float>(size.width), - .height = static_cast<float>(size.height), - .minDepth = 0.0f, - .maxDepth = 1.0f, - }; - const VkRect2D scissor{ - .offset = {0, 0}, - .extent = size, - }; - cmdbuf.BeginRenderPass(renderpass_bi, VK_SUBPASS_CONTENTS_INLINE); - switch (anti_alias_pass) { - case Settings::AntiAliasing::Fxaa: - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, *aa_pipeline); - break; - default: - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, *aa_pipeline); - break; - } - cmdbuf.SetViewport(0, viewport); - cmdbuf.SetScissor(0, scissor); + // Update window adapt pass + SetWindowAdaptPass(); - cmdbuf.BindVertexBuffer(0, *buffer, offsetof(BufferData, vertices)); - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, *aa_pipeline_layout, 0, - aa_descriptor_sets[index], {}); - cmdbuf.Draw(4, 1, 0, 0); - cmdbuf.EndRenderPass(); - - { - VkImageMemoryBarrier blit_read_barrier = base_barrier; - blit_read_barrier.image = *aa_image; - blit_read_barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - blit_read_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, blit_read_barrier); - } - }); - source_image_view = *aa_image_view; - } - if (use_accelerated && anti_alias_pass == Settings::AntiAliasing::Smaa) { - if (!smaa) { - const u32 up_scale = Settings::values.resolution_info.up_scale; - const u32 down_shift = Settings::values.resolution_info.down_shift; - const VkExtent2D smaa_size{ - .width = (up_scale * framebuffer.width) >> down_shift, - .height = (up_scale * framebuffer.height) >> down_shift, - }; - CreateSMAA(smaa_size); + // Update frame format if needed + if (presentation_recreate_required) { + present_manager.RecreateFrame(frame, layout.width, layout.height, swapchain_view_format, + window_adapt->GetRenderPass()); } - source_image_view = smaa->Draw(scheduler, image_index, source_image, source_image_view); } - if (fsr) { - const auto crop_rect = NormalizeCrop(framebuffer, screen_info); - const VkExtent2D fsr_input_size{ - .width = Settings::values.resolution_info.ScaleUp(screen_info.width), - .height = Settings::values.resolution_info.ScaleUp(screen_info.height), - }; - VkImageView fsr_image_view = - fsr->Draw(scheduler, image_index, source_image_view, fsr_input_size, crop_rect); - UpdateDescriptorSet(fsr_image_view, true); - } else { - const bool is_nn = - Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::NearestNeighbor; - UpdateDescriptorSet(source_image_view, is_nn); - } - - scheduler.Record([this, host_framebuffer, index = image_index, - size = render_area](vk::CommandBuffer cmdbuf) { - const f32 bg_red = Settings::values.bg_red.GetValue() / 255.0f; - const f32 bg_green = Settings::values.bg_green.GetValue() / 255.0f; - const f32 bg_blue = Settings::values.bg_blue.GetValue() / 255.0f; - const VkClearValue clear_color{ - .color = {.float32 = {bg_red, bg_green, bg_blue, 1.0f}}, - }; - const VkRenderPassBeginInfo renderpass_bi{ - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, - .pNext = nullptr, - .renderPass = *renderpass, - .framebuffer = host_framebuffer, - .renderArea = - { - .offset = {0, 0}, - .extent = size, - }, - .clearValueCount = 1, - .pClearValues = &clear_color, - }; - const VkViewport viewport{ - .x = 0.0f, - .y = 0.0f, - .width = static_cast<float>(size.width), - .height = static_cast<float>(size.height), - .minDepth = 0.0f, - .maxDepth = 1.0f, - }; - const VkRect2D scissor{ - .offset = {0, 0}, - .extent = size, - }; - cmdbuf.BeginRenderPass(renderpass_bi, VK_SUBPASS_CONTENTS_INLINE); - auto graphics_pipeline = [this]() { - switch (Settings::values.scaling_filter.GetValue()) { - case Settings::ScalingFilter::NearestNeighbor: - case Settings::ScalingFilter::Bilinear: - return *bilinear_pipeline; - case Settings::ScalingFilter::Bicubic: - return *bicubic_pipeline; - case Settings::ScalingFilter::Gaussian: - return *gaussian_pipeline; - case Settings::ScalingFilter::ScaleForce: - return *scaleforce_pipeline; - default: - return *bilinear_pipeline; - } - }(); - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, graphics_pipeline); - cmdbuf.SetViewport(0, viewport); - cmdbuf.SetScissor(0, scissor); - cmdbuf.BindVertexBuffer(0, *buffer, offsetof(BufferData, vertices)); - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline_layout, 0, - descriptor_sets[index], {}); - cmdbuf.Draw(4, 1, 0, 0); - cmdbuf.EndRenderPass(); - }); -} + // Add additional layers if needed + const VkExtent2D window_size{ + .width = layout.screen.GetWidth(), + .height = layout.screen.GetHeight(), + }; -void BlitScreen::DrawToSwapchain(Frame* frame, const Tegra::FramebufferConfig& framebuffer, - bool use_accelerated) { - // Recreate dynamic resources if the the image count or input format changed - const VkFormat current_framebuffer_format = - std::exchange(framebuffer_view_format, GetFormat(framebuffer)); - if (const std::size_t swapchain_images = swapchain.GetImageCount(); - swapchain_images != image_count || current_framebuffer_format != framebuffer_view_format) { - image_count = swapchain_images; - Recreate(); + while (layers.size() < framebuffers.size()) { + layers.emplace_back(device, memory_allocator, scheduler, device_memory, image_count, + window_size, window_adapt->GetDescriptorSetLayout()); } - // Recreate the presentation frame if the dimensions of the window changed - const Layout::FramebufferLayout layout = render_window.GetFramebufferLayout(); - if (layout.width != frame->width || layout.height != frame->height) { - Recreate(); - present_manager.RecreateFrame(frame, layout.width, layout.height, swapchain_view_format, - *renderpass); - } + // Perform the draw + window_adapt->Draw(rasterizer, scheduler, image_index, layers, framebuffers, layout, frame); - const VkExtent2D render_area{frame->width, frame->height}; - Draw(framebuffer, *frame->framebuffer, layout, render_area, use_accelerated); + // Advance to next image if (++image_index >= image_count) { image_index = 0; } } -vk::Framebuffer BlitScreen::CreateFramebuffer(const VkImageView& image_view, VkExtent2D extent) { - return CreateFramebuffer(image_view, extent, renderpass); +vk::Framebuffer BlitScreen::CreateFramebuffer(const Layout::FramebufferLayout& layout, + VkImageView image_view, + VkFormat current_view_format) { + const bool format_updated = + std::exchange(swapchain_view_format, current_view_format) != current_view_format; + if (!window_adapt || scaling_filter != Settings::values.scaling_filter.GetValue() || + format_updated) { + WaitIdle(); + SetWindowAdaptPass(); + } + const VkExtent2D extent{ + .width = layout.width, + .height = layout.height, + }; + return CreateFramebuffer(image_view, extent, window_adapt->GetRenderPass()); } vk::Framebuffer BlitScreen::CreateFramebuffer(const VkImageView& image_view, VkExtent2D extent, - vk::RenderPass& rd) { + VkRenderPass render_pass) { return device.GetLogical().CreateFramebuffer(VkFramebufferCreateInfo{ .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, .pNext = nullptr, .flags = 0, - .renderPass = *rd, + .renderPass = render_pass, .attachmentCount = 1, .pAttachments = &image_view, .width = extent.width, @@ -525,969 +146,4 @@ vk::Framebuffer BlitScreen::CreateFramebuffer(const VkImageView& image_view, VkE }); } -void BlitScreen::CreateStaticResources() { - CreateShaders(); - CreateSampler(); -} - -void BlitScreen::CreateDynamicResources() { - CreateDescriptorPool(); - CreateDescriptorSetLayout(); - CreateDescriptorSets(); - CreatePipelineLayout(); - CreateRenderPass(); - CreateGraphicsPipeline(); - fsr.reset(); - smaa.reset(); - if (Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::Fsr) { - CreateFSR(); - } -} - -void BlitScreen::RefreshResources(const Tegra::FramebufferConfig& framebuffer) { - if (Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::Fsr) { - if (!fsr) { - CreateFSR(); - } - } else { - fsr.reset(); - } - - if (framebuffer.width == raw_width && framebuffer.height == raw_height && - framebuffer.pixel_format == pixel_format && !raw_images.empty()) { - return; - } - - raw_width = framebuffer.width; - raw_height = framebuffer.height; - pixel_format = framebuffer.pixel_format; - - smaa.reset(); - ReleaseRawImages(); - - CreateStagingBuffer(framebuffer); - CreateRawImages(framebuffer); -} - -void BlitScreen::CreateShaders() { - vertex_shader = BuildShader(device, VULKAN_PRESENT_VERT_SPV); - fxaa_vertex_shader = BuildShader(device, FXAA_VERT_SPV); - fxaa_fragment_shader = BuildShader(device, FXAA_FRAG_SPV); - bilinear_fragment_shader = BuildShader(device, VULKAN_PRESENT_FRAG_SPV); - bicubic_fragment_shader = BuildShader(device, PRESENT_BICUBIC_FRAG_SPV); - gaussian_fragment_shader = BuildShader(device, PRESENT_GAUSSIAN_FRAG_SPV); - if (device.IsFloat16Supported()) { - scaleforce_fragment_shader = BuildShader(device, VULKAN_PRESENT_SCALEFORCE_FP16_FRAG_SPV); - } else { - scaleforce_fragment_shader = BuildShader(device, VULKAN_PRESENT_SCALEFORCE_FP32_FRAG_SPV); - } -} - -void BlitScreen::CreateDescriptorPool() { - const std::array<VkDescriptorPoolSize, 2> pool_sizes{{ - { - .type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - .descriptorCount = static_cast<u32>(image_count), - }, - { - .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = static_cast<u32>(image_count), - }, - }}; - - const std::array<VkDescriptorPoolSize, 1> pool_sizes_aa{{ - { - .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = static_cast<u32>(image_count * 2), - }, - }}; - - const VkDescriptorPoolCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .maxSets = static_cast<u32>(image_count), - .poolSizeCount = static_cast<u32>(pool_sizes.size()), - .pPoolSizes = pool_sizes.data(), - }; - descriptor_pool = device.GetLogical().CreateDescriptorPool(ci); - - const VkDescriptorPoolCreateInfo ci_aa{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .maxSets = static_cast<u32>(image_count), - .poolSizeCount = static_cast<u32>(pool_sizes_aa.size()), - .pPoolSizes = pool_sizes_aa.data(), - }; - aa_descriptor_pool = device.GetLogical().CreateDescriptorPool(ci_aa); -} - -void BlitScreen::CreateRenderPass() { - renderpass = CreateRenderPassImpl(swapchain_view_format); -} - -vk::RenderPass BlitScreen::CreateRenderPassImpl(VkFormat format) { - const VkAttachmentDescription color_attachment{ - .flags = 0, - .format = format, - .samples = VK_SAMPLE_COUNT_1_BIT, - .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, - .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, - .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, - .finalLayout = VK_IMAGE_LAYOUT_GENERAL, - }; - - const VkAttachmentReference color_attachment_ref{ - .attachment = 0, - .layout = VK_IMAGE_LAYOUT_GENERAL, - }; - - const VkSubpassDescription subpass_description{ - .flags = 0, - .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS, - .inputAttachmentCount = 0, - .pInputAttachments = nullptr, - .colorAttachmentCount = 1, - .pColorAttachments = &color_attachment_ref, - .pResolveAttachments = nullptr, - .pDepthStencilAttachment = nullptr, - .preserveAttachmentCount = 0, - .pPreserveAttachments = nullptr, - }; - - const VkSubpassDependency dependency{ - .srcSubpass = VK_SUBPASS_EXTERNAL, - .dstSubpass = 0, - .srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - .dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - .srcAccessMask = 0, - .dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, - .dependencyFlags = 0, - }; - - const VkRenderPassCreateInfo renderpass_ci{ - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .attachmentCount = 1, - .pAttachments = &color_attachment, - .subpassCount = 1, - .pSubpasses = &subpass_description, - .dependencyCount = 1, - .pDependencies = &dependency, - }; - - return device.GetLogical().CreateRenderPass(renderpass_ci); -} - -void BlitScreen::CreateDescriptorSetLayout() { - const std::array<VkDescriptorSetLayoutBinding, 2> layout_bindings{{ - { - .binding = 0, - .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_VERTEX_BIT, - .pImmutableSamplers = nullptr, - }, - { - .binding = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT, - .pImmutableSamplers = nullptr, - }, - }}; - - const std::array<VkDescriptorSetLayoutBinding, 2> layout_bindings_aa{{ - { - .binding = 0, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_VERTEX_BIT, - .pImmutableSamplers = nullptr, - }, - { - .binding = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT, - .pImmutableSamplers = nullptr, - }, - }}; - - const VkDescriptorSetLayoutCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .bindingCount = static_cast<u32>(layout_bindings.size()), - .pBindings = layout_bindings.data(), - }; - - const VkDescriptorSetLayoutCreateInfo ci_aa{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .bindingCount = static_cast<u32>(layout_bindings_aa.size()), - .pBindings = layout_bindings_aa.data(), - }; - - descriptor_set_layout = device.GetLogical().CreateDescriptorSetLayout(ci); - aa_descriptor_set_layout = device.GetLogical().CreateDescriptorSetLayout(ci_aa); -} - -void BlitScreen::CreateDescriptorSets() { - const std::vector layouts(image_count, *descriptor_set_layout); - const std::vector layouts_aa(image_count, *aa_descriptor_set_layout); - - const VkDescriptorSetAllocateInfo ai{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .pNext = nullptr, - .descriptorPool = *descriptor_pool, - .descriptorSetCount = static_cast<u32>(image_count), - .pSetLayouts = layouts.data(), - }; - - const VkDescriptorSetAllocateInfo ai_aa{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .pNext = nullptr, - .descriptorPool = *aa_descriptor_pool, - .descriptorSetCount = static_cast<u32>(image_count), - .pSetLayouts = layouts_aa.data(), - }; - - descriptor_sets = descriptor_pool.Allocate(ai); - aa_descriptor_sets = aa_descriptor_pool.Allocate(ai_aa); -} - -void BlitScreen::CreatePipelineLayout() { - const VkPipelineLayoutCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .setLayoutCount = 1, - .pSetLayouts = descriptor_set_layout.address(), - .pushConstantRangeCount = 0, - .pPushConstantRanges = nullptr, - }; - const VkPipelineLayoutCreateInfo ci_aa{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .setLayoutCount = 1, - .pSetLayouts = aa_descriptor_set_layout.address(), - .pushConstantRangeCount = 0, - .pPushConstantRanges = nullptr, - }; - pipeline_layout = device.GetLogical().CreatePipelineLayout(ci); - aa_pipeline_layout = device.GetLogical().CreatePipelineLayout(ci_aa); -} - -void BlitScreen::CreateGraphicsPipeline() { - const std::array<VkPipelineShaderStageCreateInfo, 2> bilinear_shader_stages{{ - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_VERTEX_BIT, - .module = *vertex_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_FRAGMENT_BIT, - .module = *bilinear_fragment_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - }}; - - const std::array<VkPipelineShaderStageCreateInfo, 2> bicubic_shader_stages{{ - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_VERTEX_BIT, - .module = *vertex_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_FRAGMENT_BIT, - .module = *bicubic_fragment_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - }}; - - const std::array<VkPipelineShaderStageCreateInfo, 2> gaussian_shader_stages{{ - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_VERTEX_BIT, - .module = *vertex_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_FRAGMENT_BIT, - .module = *gaussian_fragment_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - }}; - - const std::array<VkPipelineShaderStageCreateInfo, 2> scaleforce_shader_stages{{ - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_VERTEX_BIT, - .module = *vertex_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_FRAGMENT_BIT, - .module = *scaleforce_fragment_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - }}; - - const auto vertex_binding_description = ScreenRectVertex::GetDescription(); - const auto vertex_attrs_description = ScreenRectVertex::GetAttributes(); - - const VkPipelineVertexInputStateCreateInfo vertex_input_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .vertexBindingDescriptionCount = 1, - .pVertexBindingDescriptions = &vertex_binding_description, - .vertexAttributeDescriptionCount = u32{vertex_attrs_description.size()}, - .pVertexAttributeDescriptions = vertex_attrs_description.data(), - }; - - const VkPipelineInputAssemblyStateCreateInfo input_assembly_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, - .primitiveRestartEnable = VK_FALSE, - }; - - const VkPipelineViewportStateCreateInfo viewport_state_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .viewportCount = 1, - .pViewports = nullptr, - .scissorCount = 1, - .pScissors = nullptr, - }; - - const VkPipelineRasterizationStateCreateInfo rasterization_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .depthClampEnable = VK_FALSE, - .rasterizerDiscardEnable = VK_FALSE, - .polygonMode = VK_POLYGON_MODE_FILL, - .cullMode = VK_CULL_MODE_NONE, - .frontFace = VK_FRONT_FACE_CLOCKWISE, - .depthBiasEnable = VK_FALSE, - .depthBiasConstantFactor = 0.0f, - .depthBiasClamp = 0.0f, - .depthBiasSlopeFactor = 0.0f, - .lineWidth = 1.0f, - }; - - const VkPipelineMultisampleStateCreateInfo multisampling_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .rasterizationSamples = VK_SAMPLE_COUNT_1_BIT, - .sampleShadingEnable = VK_FALSE, - .minSampleShading = 0.0f, - .pSampleMask = nullptr, - .alphaToCoverageEnable = VK_FALSE, - .alphaToOneEnable = VK_FALSE, - }; - - const VkPipelineColorBlendAttachmentState color_blend_attachment{ - .blendEnable = VK_FALSE, - .srcColorBlendFactor = VK_BLEND_FACTOR_ZERO, - .dstColorBlendFactor = VK_BLEND_FACTOR_ZERO, - .colorBlendOp = VK_BLEND_OP_ADD, - .srcAlphaBlendFactor = VK_BLEND_FACTOR_ZERO, - .dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO, - .alphaBlendOp = VK_BLEND_OP_ADD, - .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | - VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT, - }; - - const VkPipelineColorBlendStateCreateInfo color_blend_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .logicOpEnable = VK_FALSE, - .logicOp = VK_LOGIC_OP_COPY, - .attachmentCount = 1, - .pAttachments = &color_blend_attachment, - .blendConstants = {0.0f, 0.0f, 0.0f, 0.0f}, - }; - - static constexpr std::array dynamic_states{ - VK_DYNAMIC_STATE_VIEWPORT, - VK_DYNAMIC_STATE_SCISSOR, - }; - const VkPipelineDynamicStateCreateInfo dynamic_state_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .dynamicStateCount = static_cast<u32>(dynamic_states.size()), - .pDynamicStates = dynamic_states.data(), - }; - - const VkGraphicsPipelineCreateInfo bilinear_pipeline_ci{ - .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stageCount = static_cast<u32>(bilinear_shader_stages.size()), - .pStages = bilinear_shader_stages.data(), - .pVertexInputState = &vertex_input_ci, - .pInputAssemblyState = &input_assembly_ci, - .pTessellationState = nullptr, - .pViewportState = &viewport_state_ci, - .pRasterizationState = &rasterization_ci, - .pMultisampleState = &multisampling_ci, - .pDepthStencilState = nullptr, - .pColorBlendState = &color_blend_ci, - .pDynamicState = &dynamic_state_ci, - .layout = *pipeline_layout, - .renderPass = *renderpass, - .subpass = 0, - .basePipelineHandle = 0, - .basePipelineIndex = 0, - }; - - const VkGraphicsPipelineCreateInfo bicubic_pipeline_ci{ - .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stageCount = static_cast<u32>(bicubic_shader_stages.size()), - .pStages = bicubic_shader_stages.data(), - .pVertexInputState = &vertex_input_ci, - .pInputAssemblyState = &input_assembly_ci, - .pTessellationState = nullptr, - .pViewportState = &viewport_state_ci, - .pRasterizationState = &rasterization_ci, - .pMultisampleState = &multisampling_ci, - .pDepthStencilState = nullptr, - .pColorBlendState = &color_blend_ci, - .pDynamicState = &dynamic_state_ci, - .layout = *pipeline_layout, - .renderPass = *renderpass, - .subpass = 0, - .basePipelineHandle = 0, - .basePipelineIndex = 0, - }; - - const VkGraphicsPipelineCreateInfo gaussian_pipeline_ci{ - .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stageCount = static_cast<u32>(gaussian_shader_stages.size()), - .pStages = gaussian_shader_stages.data(), - .pVertexInputState = &vertex_input_ci, - .pInputAssemblyState = &input_assembly_ci, - .pTessellationState = nullptr, - .pViewportState = &viewport_state_ci, - .pRasterizationState = &rasterization_ci, - .pMultisampleState = &multisampling_ci, - .pDepthStencilState = nullptr, - .pColorBlendState = &color_blend_ci, - .pDynamicState = &dynamic_state_ci, - .layout = *pipeline_layout, - .renderPass = *renderpass, - .subpass = 0, - .basePipelineHandle = 0, - .basePipelineIndex = 0, - }; - - const VkGraphicsPipelineCreateInfo scaleforce_pipeline_ci{ - .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stageCount = static_cast<u32>(scaleforce_shader_stages.size()), - .pStages = scaleforce_shader_stages.data(), - .pVertexInputState = &vertex_input_ci, - .pInputAssemblyState = &input_assembly_ci, - .pTessellationState = nullptr, - .pViewportState = &viewport_state_ci, - .pRasterizationState = &rasterization_ci, - .pMultisampleState = &multisampling_ci, - .pDepthStencilState = nullptr, - .pColorBlendState = &color_blend_ci, - .pDynamicState = &dynamic_state_ci, - .layout = *pipeline_layout, - .renderPass = *renderpass, - .subpass = 0, - .basePipelineHandle = 0, - .basePipelineIndex = 0, - }; - - bilinear_pipeline = device.GetLogical().CreateGraphicsPipeline(bilinear_pipeline_ci); - bicubic_pipeline = device.GetLogical().CreateGraphicsPipeline(bicubic_pipeline_ci); - gaussian_pipeline = device.GetLogical().CreateGraphicsPipeline(gaussian_pipeline_ci); - scaleforce_pipeline = device.GetLogical().CreateGraphicsPipeline(scaleforce_pipeline_ci); -} - -void BlitScreen::CreateSampler() { - const VkSamplerCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .magFilter = VK_FILTER_LINEAR, - .minFilter = VK_FILTER_LINEAR, - .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST, - .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, - .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, - .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, - .mipLodBias = 0.0f, - .anisotropyEnable = VK_FALSE, - .maxAnisotropy = 0.0f, - .compareEnable = VK_FALSE, - .compareOp = VK_COMPARE_OP_NEVER, - .minLod = 0.0f, - .maxLod = 0.0f, - .borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, - .unnormalizedCoordinates = VK_FALSE, - }; - - const VkSamplerCreateInfo ci_nn{ - .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .magFilter = VK_FILTER_NEAREST, - .minFilter = VK_FILTER_NEAREST, - .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST, - .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, - .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, - .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, - .mipLodBias = 0.0f, - .anisotropyEnable = VK_FALSE, - .maxAnisotropy = 0.0f, - .compareEnable = VK_FALSE, - .compareOp = VK_COMPARE_OP_NEVER, - .minLod = 0.0f, - .maxLod = 0.0f, - .borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, - .unnormalizedCoordinates = VK_FALSE, - }; - - sampler = device.GetLogical().CreateSampler(ci); - nn_sampler = device.GetLogical().CreateSampler(ci_nn); -} - -void BlitScreen::ReleaseRawImages() { - for (const u64 tick : resource_ticks) { - scheduler.Wait(tick); - } - raw_images.clear(); - aa_image_view.reset(); - aa_image.reset(); - buffer.reset(); -} - -void BlitScreen::CreateStagingBuffer(const Tegra::FramebufferConfig& framebuffer) { - const VkBufferCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .size = CalculateBufferSize(framebuffer), - .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | - VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = nullptr, - }; - - buffer = memory_allocator.CreateBuffer(ci, MemoryUsage::Upload); -} - -void BlitScreen::CreateRawImages(const Tegra::FramebufferConfig& framebuffer) { - raw_images.resize(image_count); - raw_image_views.resize(image_count); - - const auto create_image = [&](bool used_on_framebuffer = false, u32 up_scale = 1, - u32 down_shift = 0) { - u32 extra_usages = used_on_framebuffer ? VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT - : VK_IMAGE_USAGE_TRANSFER_DST_BIT; - return memory_allocator.CreateImage(VkImageCreateInfo{ - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .imageType = VK_IMAGE_TYPE_2D, - .format = used_on_framebuffer ? VK_FORMAT_R16G16B16A16_SFLOAT : framebuffer_view_format, - .extent = - { - .width = (up_scale * framebuffer.width) >> down_shift, - .height = (up_scale * framebuffer.height) >> down_shift, - .depth = 1, - }, - .mipLevels = 1, - .arrayLayers = 1, - .samples = VK_SAMPLE_COUNT_1_BIT, - .tiling = used_on_framebuffer ? VK_IMAGE_TILING_OPTIMAL : VK_IMAGE_TILING_LINEAR, - .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | extra_usages, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = nullptr, - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, - }); - }; - const auto create_image_view = [&](vk::Image& image, bool used_on_framebuffer = false) { - return device.GetLogical().CreateImageView(VkImageViewCreateInfo{ - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .image = *image, - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .format = used_on_framebuffer ? VK_FORMAT_R16G16B16A16_SFLOAT : framebuffer_view_format, - .components = - { - .r = VK_COMPONENT_SWIZZLE_IDENTITY, - .g = VK_COMPONENT_SWIZZLE_IDENTITY, - .b = VK_COMPONENT_SWIZZLE_IDENTITY, - .a = VK_COMPONENT_SWIZZLE_IDENTITY, - }, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }, - }); - }; - - for (size_t i = 0; i < image_count; ++i) { - raw_images[i] = create_image(); - raw_image_views[i] = create_image_view(raw_images[i]); - } - - // AA Resources - const u32 up_scale = Settings::values.resolution_info.up_scale; - const u32 down_shift = Settings::values.resolution_info.down_shift; - aa_image = create_image(true, up_scale, down_shift); - aa_image_view = create_image_view(aa_image, true); - VkExtent2D size{ - .width = (up_scale * framebuffer.width) >> down_shift, - .height = (up_scale * framebuffer.height) >> down_shift, - }; - if (aa_renderpass) { - aa_framebuffer = CreateFramebuffer(*aa_image_view, size, aa_renderpass); - return; - } - aa_renderpass = CreateRenderPassImpl(VK_FORMAT_R16G16B16A16_SFLOAT); - aa_framebuffer = CreateFramebuffer(*aa_image_view, size, aa_renderpass); - - const std::array<VkPipelineShaderStageCreateInfo, 2> fxaa_shader_stages{{ - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_VERTEX_BIT, - .module = *fxaa_vertex_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_FRAGMENT_BIT, - .module = *fxaa_fragment_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }, - }}; - - const auto vertex_binding_description = ScreenRectVertex::GetDescription(); - const auto vertex_attrs_description = ScreenRectVertex::GetAttributes(); - - const VkPipelineVertexInputStateCreateInfo vertex_input_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .vertexBindingDescriptionCount = 1, - .pVertexBindingDescriptions = &vertex_binding_description, - .vertexAttributeDescriptionCount = u32{vertex_attrs_description.size()}, - .pVertexAttributeDescriptions = vertex_attrs_description.data(), - }; - - const VkPipelineInputAssemblyStateCreateInfo input_assembly_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, - .primitiveRestartEnable = VK_FALSE, - }; - - const VkPipelineViewportStateCreateInfo viewport_state_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .viewportCount = 1, - .pViewports = nullptr, - .scissorCount = 1, - .pScissors = nullptr, - }; - - const VkPipelineRasterizationStateCreateInfo rasterization_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .depthClampEnable = VK_FALSE, - .rasterizerDiscardEnable = VK_FALSE, - .polygonMode = VK_POLYGON_MODE_FILL, - .cullMode = VK_CULL_MODE_NONE, - .frontFace = VK_FRONT_FACE_CLOCKWISE, - .depthBiasEnable = VK_FALSE, - .depthBiasConstantFactor = 0.0f, - .depthBiasClamp = 0.0f, - .depthBiasSlopeFactor = 0.0f, - .lineWidth = 1.0f, - }; - - const VkPipelineMultisampleStateCreateInfo multisampling_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .rasterizationSamples = VK_SAMPLE_COUNT_1_BIT, - .sampleShadingEnable = VK_FALSE, - .minSampleShading = 0.0f, - .pSampleMask = nullptr, - .alphaToCoverageEnable = VK_FALSE, - .alphaToOneEnable = VK_FALSE, - }; - - const VkPipelineColorBlendAttachmentState color_blend_attachment{ - .blendEnable = VK_FALSE, - .srcColorBlendFactor = VK_BLEND_FACTOR_ZERO, - .dstColorBlendFactor = VK_BLEND_FACTOR_ZERO, - .colorBlendOp = VK_BLEND_OP_ADD, - .srcAlphaBlendFactor = VK_BLEND_FACTOR_ZERO, - .dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO, - .alphaBlendOp = VK_BLEND_OP_ADD, - .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | - VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT, - }; - - const VkPipelineColorBlendStateCreateInfo color_blend_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .logicOpEnable = VK_FALSE, - .logicOp = VK_LOGIC_OP_COPY, - .attachmentCount = 1, - .pAttachments = &color_blend_attachment, - .blendConstants = {0.0f, 0.0f, 0.0f, 0.0f}, - }; - - static constexpr std::array dynamic_states{ - VK_DYNAMIC_STATE_VIEWPORT, - VK_DYNAMIC_STATE_SCISSOR, - }; - const VkPipelineDynamicStateCreateInfo dynamic_state_ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .dynamicStateCount = static_cast<u32>(dynamic_states.size()), - .pDynamicStates = dynamic_states.data(), - }; - - const VkGraphicsPipelineCreateInfo fxaa_pipeline_ci{ - .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stageCount = static_cast<u32>(fxaa_shader_stages.size()), - .pStages = fxaa_shader_stages.data(), - .pVertexInputState = &vertex_input_ci, - .pInputAssemblyState = &input_assembly_ci, - .pTessellationState = nullptr, - .pViewportState = &viewport_state_ci, - .pRasterizationState = &rasterization_ci, - .pMultisampleState = &multisampling_ci, - .pDepthStencilState = nullptr, - .pColorBlendState = &color_blend_ci, - .pDynamicState = &dynamic_state_ci, - .layout = *aa_pipeline_layout, - .renderPass = *aa_renderpass, - .subpass = 0, - .basePipelineHandle = 0, - .basePipelineIndex = 0, - }; - - // AA - aa_pipeline = device.GetLogical().CreateGraphicsPipeline(fxaa_pipeline_ci); -} - -void BlitScreen::UpdateAADescriptorSet(VkImageView image_view, bool nn) const { - const VkDescriptorImageInfo image_info{ - .sampler = nn ? *nn_sampler : *sampler, - .imageView = image_view, - .imageLayout = VK_IMAGE_LAYOUT_GENERAL, - }; - - const VkWriteDescriptorSet sampler_write{ - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .pNext = nullptr, - .dstSet = aa_descriptor_sets[image_index], - .dstBinding = 0, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &image_info, - .pBufferInfo = nullptr, - .pTexelBufferView = nullptr, - }; - - const VkWriteDescriptorSet sampler_write_2{ - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .pNext = nullptr, - .dstSet = aa_descriptor_sets[image_index], - .dstBinding = 1, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &image_info, - .pBufferInfo = nullptr, - .pTexelBufferView = nullptr, - }; - - device.GetLogical().UpdateDescriptorSets(std::array{sampler_write, sampler_write_2}, {}); -} - -void BlitScreen::UpdateDescriptorSet(VkImageView image_view, bool nn) const { - const VkDescriptorBufferInfo buffer_info{ - .buffer = *buffer, - .offset = offsetof(BufferData, uniform), - .range = sizeof(BufferData::uniform), - }; - - const VkWriteDescriptorSet ubo_write{ - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .pNext = nullptr, - .dstSet = descriptor_sets[image_index], - .dstBinding = 0, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - .pImageInfo = nullptr, - .pBufferInfo = &buffer_info, - .pTexelBufferView = nullptr, - }; - - const VkDescriptorImageInfo image_info{ - .sampler = nn ? *nn_sampler : *sampler, - .imageView = image_view, - .imageLayout = VK_IMAGE_LAYOUT_GENERAL, - }; - - const VkWriteDescriptorSet sampler_write{ - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .pNext = nullptr, - .dstSet = descriptor_sets[image_index], - .dstBinding = 1, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &image_info, - .pBufferInfo = nullptr, - .pTexelBufferView = nullptr, - }; - - device.GetLogical().UpdateDescriptorSets(std::array{ubo_write, sampler_write}, {}); -} - -void BlitScreen::SetUniformData(BufferData& data, const Layout::FramebufferLayout layout) const { - data.uniform.modelview_matrix = - MakeOrthographicMatrix(static_cast<f32>(layout.width), static_cast<f32>(layout.height)); -} - -void BlitScreen::SetVertexData(BufferData& data, const Tegra::FramebufferConfig& framebuffer, - const Layout::FramebufferLayout layout) const { - f32 left, top, right, bottom; - - if (fsr) { - // FSR has already applied the crop, so we just want to render the image - // it has produced. - left = 0; - top = 0; - right = 1; - bottom = 1; - } else { - // Get the normalized crop rectangle. - const auto crop = NormalizeCrop(framebuffer, screen_info); - - // Apply the crop. - left = crop.left; - top = crop.top; - right = crop.right; - bottom = crop.bottom; - } - - // Map the coordinates to the screen. - const auto& screen = layout.screen; - const auto x = static_cast<f32>(screen.left); - const auto y = static_cast<f32>(screen.top); - const auto w = static_cast<f32>(screen.GetWidth()); - const auto h = static_cast<f32>(screen.GetHeight()); - - data.vertices[0] = ScreenRectVertex(x, y, left, top); - data.vertices[1] = ScreenRectVertex(x + w, y, right, top); - data.vertices[2] = ScreenRectVertex(x, y + h, left, bottom); - data.vertices[3] = ScreenRectVertex(x + w, y + h, right, bottom); -} - -void BlitScreen::CreateSMAA(VkExtent2D smaa_size) { - smaa = std::make_unique<SMAA>(device, memory_allocator, image_count, smaa_size); -} - -void BlitScreen::CreateFSR() { - const auto& layout = render_window.GetFramebufferLayout(); - const VkExtent2D fsr_size{ - .width = layout.screen.GetWidth(), - .height = layout.screen.GetHeight(), - }; - fsr = std::make_unique<FSR>(device, memory_allocator, image_count, fsr_size); -} - -u64 BlitScreen::CalculateBufferSize(const Tegra::FramebufferConfig& framebuffer) const { - return sizeof(BufferData) + GetSizeInBytes(framebuffer) * image_count; -} - -u64 BlitScreen::GetRawImageOffset(const Tegra::FramebufferConfig& framebuffer) const { - constexpr auto first_image_offset = static_cast<u64>(sizeof(BufferData)); - return first_image_offset + GetSizeInBytes(framebuffer) * image_index; -} - } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.h b/src/video_core/renderer_vulkan/vk_blit_screen.h index 3eff76009..cbdf2d5d0 100644 --- a/src/video_core/renderer_vulkan/vk_blit_screen.h +++ b/src/video_core/renderer_vulkan/vk_blit_screen.h @@ -3,10 +3,12 @@ #pragma once +#include <list> #include <memory> #include "core/frontend/framebuffer_layout.h" #include "video_core/host1x/gpu_device_memory_manager.h" +#include "video_core/renderer_vulkan/present/layer.h" #include "video_core/vulkan_common/vulkan_memory_allocator.h" #include "video_core/vulkan_common/vulkan_wrapper.h" @@ -14,155 +16,67 @@ namespace Core { class System; } -namespace Core::Frontend { -class EmuWindow; -} - namespace Tegra { struct FramebufferConfig; } -namespace VideoCore { -class RasterizerInterface; -} - -namespace Service::android { -enum class PixelFormat : u32; -} +namespace Settings { +enum class ScalingFilter : u32; +} // namespace Settings namespace Vulkan { -struct ScreenInfo; - class Device; -class FSR; class RasterizerVulkan; class Scheduler; -class SMAA; -class Swapchain; class PresentManager; +class WindowAdaptPass; struct Frame; -struct ScreenInfo { +struct FramebufferTextureInfo { VkImage image{}; VkImageView image_view{}; u32 width{}; u32 height{}; + u32 scaled_width{}; + u32 scaled_height{}; }; class BlitScreen { public: - explicit BlitScreen(Tegra::MaxwellDeviceMemoryManager& device_memory, - Core::Frontend::EmuWindow& render_window, const Device& device, - MemoryAllocator& memory_manager, Swapchain& swapchain, - PresentManager& present_manager, Scheduler& scheduler, - const ScreenInfo& screen_info); + explicit BlitScreen(Tegra::MaxwellDeviceMemoryManager& device_memory, const Device& device, + MemoryAllocator& memory_allocator, PresentManager& present_manager, + Scheduler& scheduler); ~BlitScreen(); - void Recreate(); - - void Draw(const Tegra::FramebufferConfig& framebuffer, const VkFramebuffer& host_framebuffer, - const Layout::FramebufferLayout layout, VkExtent2D render_area, bool use_accelerated); - - void DrawToSwapchain(Frame* frame, const Tegra::FramebufferConfig& framebuffer, - bool use_accelerated); + void DrawToFrame(RasterizerVulkan& rasterizer, Frame* frame, + std::span<const Tegra::FramebufferConfig> framebuffers, + const Layout::FramebufferLayout& layout, size_t current_swapchain_image_count, + VkFormat current_swapchain_view_format); - [[nodiscard]] vk::Framebuffer CreateFramebuffer(const VkImageView& image_view, - VkExtent2D extent); - - [[nodiscard]] vk::Framebuffer CreateFramebuffer(const VkImageView& image_view, - VkExtent2D extent, vk::RenderPass& rd); + [[nodiscard]] vk::Framebuffer CreateFramebuffer(const Layout::FramebufferLayout& layout, + VkImageView image_view, + VkFormat current_view_format); private: - struct BufferData; - - void CreateStaticResources(); - void CreateShaders(); - void CreateDescriptorPool(); - void CreateRenderPass(); - vk::RenderPass CreateRenderPassImpl(VkFormat format); - void CreateDescriptorSetLayout(); - void CreateDescriptorSets(); - void CreatePipelineLayout(); - void CreateGraphicsPipeline(); - void CreateSampler(); - - void CreateDynamicResources(); - - void RefreshResources(const Tegra::FramebufferConfig& framebuffer); - void ReleaseRawImages(); - void CreateStagingBuffer(const Tegra::FramebufferConfig& framebuffer); - void CreateRawImages(const Tegra::FramebufferConfig& framebuffer); - - void UpdateDescriptorSet(VkImageView image_view, bool nn) const; - void UpdateAADescriptorSet(VkImageView image_view, bool nn) const; - void SetUniformData(BufferData& data, const Layout::FramebufferLayout layout) const; - void SetVertexData(BufferData& data, const Tegra::FramebufferConfig& framebuffer, - const Layout::FramebufferLayout layout) const; - - void CreateSMAA(VkExtent2D smaa_size); - void CreateFSR(); - - u64 CalculateBufferSize(const Tegra::FramebufferConfig& framebuffer) const; - u64 GetRawImageOffset(const Tegra::FramebufferConfig& framebuffer) const; + void WaitIdle(); + void SetWindowAdaptPass(); + vk::Framebuffer CreateFramebuffer(const VkImageView& image_view, VkExtent2D extent, + VkRenderPass render_pass); Tegra::MaxwellDeviceMemoryManager& device_memory; - Core::Frontend::EmuWindow& render_window; const Device& device; MemoryAllocator& memory_allocator; - Swapchain& swapchain; PresentManager& present_manager; Scheduler& scheduler; - std::size_t image_count; + std::size_t image_count{}; std::size_t image_index{}; - const ScreenInfo& screen_info; - - vk::ShaderModule vertex_shader; - vk::ShaderModule fxaa_vertex_shader; - vk::ShaderModule fxaa_fragment_shader; - vk::ShaderModule bilinear_fragment_shader; - vk::ShaderModule bicubic_fragment_shader; - vk::ShaderModule gaussian_fragment_shader; - vk::ShaderModule scaleforce_fragment_shader; - vk::DescriptorPool descriptor_pool; - vk::DescriptorSetLayout descriptor_set_layout; - vk::PipelineLayout pipeline_layout; - vk::Pipeline nearest_neighbor_pipeline; - vk::Pipeline bilinear_pipeline; - vk::Pipeline bicubic_pipeline; - vk::Pipeline gaussian_pipeline; - vk::Pipeline scaleforce_pipeline; - vk::RenderPass renderpass; - vk::DescriptorSets descriptor_sets; - vk::Sampler nn_sampler; - vk::Sampler sampler; - - vk::Buffer buffer; - - std::vector<u64> resource_ticks; - - std::vector<vk::Image> raw_images; - std::vector<vk::ImageView> raw_image_views; - - vk::DescriptorPool aa_descriptor_pool; - vk::DescriptorSetLayout aa_descriptor_set_layout; - vk::PipelineLayout aa_pipeline_layout; - vk::Pipeline aa_pipeline; - vk::RenderPass aa_renderpass; - vk::Framebuffer aa_framebuffer; - vk::DescriptorSets aa_descriptor_sets; - vk::Image aa_image; - vk::ImageView aa_image_view; - - u32 raw_width = 0; - u32 raw_height = 0; - Service::android::PixelFormat pixel_format{}; - VkFormat framebuffer_view_format; - VkFormat swapchain_view_format; - - std::unique_ptr<FSR> fsr; - std::unique_ptr<SMAA> smaa; + VkFormat swapchain_view_format{}; + + Settings::ScalingFilter scaling_filter{}; + std::unique_ptr<WindowAdaptPass> window_adapt{}; + std::list<Layer> layers{}; }; } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_fsr.cpp b/src/video_core/renderer_vulkan/vk_fsr.cpp deleted file mode 100644 index f7a05fbc0..000000000 --- a/src/video_core/renderer_vulkan/vk_fsr.cpp +++ /dev/null @@ -1,420 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "common/common_types.h" -#include "common/div_ceil.h" -#include "common/settings.h" - -#include "video_core/fsr.h" -#include "video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp16_comp_spv.h" -#include "video_core/host_shaders/vulkan_fidelityfx_fsr_easu_fp32_comp_spv.h" -#include "video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp16_comp_spv.h" -#include "video_core/host_shaders/vulkan_fidelityfx_fsr_rcas_fp32_comp_spv.h" -#include "video_core/renderer_vulkan/vk_fsr.h" -#include "video_core/renderer_vulkan/vk_scheduler.h" -#include "video_core/renderer_vulkan/vk_shader_util.h" -#include "video_core/vulkan_common/vulkan_device.h" - -namespace Vulkan { -using namespace FSR; - -FSR::FSR(const Device& device_, MemoryAllocator& memory_allocator_, size_t image_count_, - VkExtent2D output_size_) - : device{device_}, memory_allocator{memory_allocator_}, image_count{image_count_}, - output_size{output_size_} { - - CreateImages(); - CreateSampler(); - CreateShaders(); - CreateDescriptorPool(); - CreateDescriptorSetLayout(); - CreateDescriptorSets(); - CreatePipelineLayout(); - CreatePipeline(); -} - -VkImageView FSR::Draw(Scheduler& scheduler, size_t image_index, VkImageView image_view, - VkExtent2D input_image_extent, const Common::Rectangle<f32>& crop_rect) { - - UpdateDescriptorSet(image_index, image_view); - - scheduler.Record([this, image_index, input_image_extent, crop_rect](vk::CommandBuffer cmdbuf) { - const VkImageMemoryBarrier base_barrier{ - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = nullptr, - .srcAccessMask = 0, - .dstAccessMask = 0, - .oldLayout = VK_IMAGE_LAYOUT_GENERAL, - .newLayout = VK_IMAGE_LAYOUT_GENERAL, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = {}, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }, - }; - - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, *easu_pipeline); - - const f32 input_image_width = static_cast<f32>(input_image_extent.width); - const f32 input_image_height = static_cast<f32>(input_image_extent.height); - const f32 output_image_width = static_cast<f32>(output_size.width); - const f32 output_image_height = static_cast<f32>(output_size.height); - const f32 viewport_width = (crop_rect.right - crop_rect.left) * input_image_width; - const f32 viewport_x = crop_rect.left * input_image_width; - const f32 viewport_height = (crop_rect.bottom - crop_rect.top) * input_image_height; - const f32 viewport_y = crop_rect.top * input_image_height; - - std::array<u32, 4 * 4> push_constants; - FsrEasuConOffset(push_constants.data() + 0, push_constants.data() + 4, - push_constants.data() + 8, push_constants.data() + 12, - - viewport_width, viewport_height, input_image_width, input_image_height, - output_image_width, output_image_height, viewport_x, viewport_y); - cmdbuf.PushConstants(*pipeline_layout, VK_SHADER_STAGE_COMPUTE_BIT, push_constants); - - { - VkImageMemoryBarrier fsr_write_barrier = base_barrier; - fsr_write_barrier.image = *images[image_index]; - fsr_write_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; - - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, fsr_write_barrier); - } - - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline_layout, 0, - descriptor_sets[image_index * 2], {}); - cmdbuf.Dispatch(Common::DivCeil(output_size.width, 16u), - Common::DivCeil(output_size.height, 16u), 1); - - cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, *rcas_pipeline); - - const float sharpening = - static_cast<float>(Settings::values.fsr_sharpening_slider.GetValue()) / 100.0f; - - FsrRcasCon(push_constants.data(), sharpening); - cmdbuf.PushConstants(*pipeline_layout, VK_SHADER_STAGE_COMPUTE_BIT, push_constants); - - { - std::array<VkImageMemoryBarrier, 2> barriers; - auto& fsr_read_barrier = barriers[0]; - auto& blit_write_barrier = barriers[1]; - - fsr_read_barrier = base_barrier; - fsr_read_barrier.image = *images[image_index]; - fsr_read_barrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; - fsr_read_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - - blit_write_barrier = base_barrier; - blit_write_barrier.image = *images[image_count + image_index]; - blit_write_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; - blit_write_barrier.newLayout = VK_IMAGE_LAYOUT_GENERAL; - - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, {}, {}, barriers); - } - - cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline_layout, 0, - descriptor_sets[image_index * 2 + 1], {}); - cmdbuf.Dispatch(Common::DivCeil(output_size.width, 16u), - Common::DivCeil(output_size.height, 16u), 1); - - { - std::array<VkImageMemoryBarrier, 1> barriers; - auto& blit_read_barrier = barriers[0]; - - blit_read_barrier = base_barrier; - blit_read_barrier.image = *images[image_count + image_index]; - blit_read_barrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; - blit_read_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - - cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, {}, {}, barriers); - } - }); - - return *image_views[image_count + image_index]; -} - -void FSR::CreateDescriptorPool() { - const std::array<VkDescriptorPoolSize, 2> pool_sizes{{ - { - .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = static_cast<u32>(image_count * 2), - }, - { - .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, - .descriptorCount = static_cast<u32>(image_count * 2), - }, - }}; - - const VkDescriptorPoolCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .maxSets = static_cast<u32>(image_count * 2), - .poolSizeCount = static_cast<u32>(pool_sizes.size()), - .pPoolSizes = pool_sizes.data(), - }; - descriptor_pool = device.GetLogical().CreateDescriptorPool(ci); -} - -void FSR::CreateDescriptorSetLayout() { - const std::array<VkDescriptorSetLayoutBinding, 2> layout_bindings{{ - { - .binding = 0, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_COMPUTE_BIT, - .pImmutableSamplers = sampler.address(), - }, - { - .binding = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, - .descriptorCount = 1, - .stageFlags = VK_SHADER_STAGE_COMPUTE_BIT, - .pImmutableSamplers = sampler.address(), - }, - }}; - - const VkDescriptorSetLayoutCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .bindingCount = static_cast<u32>(layout_bindings.size()), - .pBindings = layout_bindings.data(), - }; - - descriptor_set_layout = device.GetLogical().CreateDescriptorSetLayout(ci); -} - -void FSR::CreateDescriptorSets() { - const u32 sets = static_cast<u32>(image_count * 2); - const std::vector layouts(sets, *descriptor_set_layout); - - const VkDescriptorSetAllocateInfo ai{ - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .pNext = nullptr, - .descriptorPool = *descriptor_pool, - .descriptorSetCount = sets, - .pSetLayouts = layouts.data(), - }; - - descriptor_sets = descriptor_pool.Allocate(ai); -} - -void FSR::CreateImages() { - images.resize(image_count * 2); - image_views.resize(image_count * 2); - - for (size_t i = 0; i < image_count * 2; ++i) { - images[i] = memory_allocator.CreateImage(VkImageCreateInfo{ - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .imageType = VK_IMAGE_TYPE_2D, - .format = VK_FORMAT_R16G16B16A16_SFLOAT, - .extent = - { - .width = output_size.width, - .height = output_size.height, - .depth = 1, - }, - .mipLevels = 1, - .arrayLayers = 1, - .samples = VK_SAMPLE_COUNT_1_BIT, - .tiling = VK_IMAGE_TILING_OPTIMAL, - .usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_STORAGE_BIT | - VK_IMAGE_USAGE_SAMPLED_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = nullptr, - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, - }); - image_views[i] = device.GetLogical().CreateImageView(VkImageViewCreateInfo{ - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .image = *images[i], - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .format = VK_FORMAT_R16G16B16A16_SFLOAT, - .components = - { - .r = VK_COMPONENT_SWIZZLE_IDENTITY, - .g = VK_COMPONENT_SWIZZLE_IDENTITY, - .b = VK_COMPONENT_SWIZZLE_IDENTITY, - .a = VK_COMPONENT_SWIZZLE_IDENTITY, - }, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }, - }); - } -} - -void FSR::CreatePipelineLayout() { - VkPushConstantRange push_const{ - .stageFlags = VK_SHADER_STAGE_COMPUTE_BIT, - .offset = 0, - .size = sizeof(std::array<u32, 4 * 4>), - }; - VkPipelineLayoutCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .setLayoutCount = 1, - .pSetLayouts = descriptor_set_layout.address(), - .pushConstantRangeCount = 1, - .pPushConstantRanges = &push_const, - }; - - pipeline_layout = device.GetLogical().CreatePipelineLayout(ci); -} - -void FSR::UpdateDescriptorSet(std::size_t image_index, VkImageView image_view) const { - const auto fsr_image_view = *image_views[image_index]; - const auto blit_image_view = *image_views[image_count + image_index]; - - const VkDescriptorImageInfo image_info{ - .sampler = VK_NULL_HANDLE, - .imageView = image_view, - .imageLayout = VK_IMAGE_LAYOUT_GENERAL, - }; - const VkDescriptorImageInfo fsr_image_info{ - .sampler = VK_NULL_HANDLE, - .imageView = fsr_image_view, - .imageLayout = VK_IMAGE_LAYOUT_GENERAL, - }; - const VkDescriptorImageInfo blit_image_info{ - .sampler = VK_NULL_HANDLE, - .imageView = blit_image_view, - .imageLayout = VK_IMAGE_LAYOUT_GENERAL, - }; - - VkWriteDescriptorSet sampler_write{ - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .pNext = nullptr, - .dstSet = descriptor_sets[image_index * 2], - .dstBinding = 0, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &image_info, - .pBufferInfo = nullptr, - .pTexelBufferView = nullptr, - }; - - VkWriteDescriptorSet output_write{ - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .pNext = nullptr, - .dstSet = descriptor_sets[image_index * 2], - .dstBinding = 1, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, - .pImageInfo = &fsr_image_info, - .pBufferInfo = nullptr, - .pTexelBufferView = nullptr, - }; - - device.GetLogical().UpdateDescriptorSets(std::array{sampler_write, output_write}, {}); - - sampler_write.dstSet = descriptor_sets[image_index * 2 + 1]; - sampler_write.pImageInfo = &fsr_image_info; - output_write.dstSet = descriptor_sets[image_index * 2 + 1]; - output_write.pImageInfo = &blit_image_info; - - device.GetLogical().UpdateDescriptorSets(std::array{sampler_write, output_write}, {}); -} - -void FSR::CreateSampler() { - const VkSamplerCreateInfo ci{ - .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .magFilter = VK_FILTER_LINEAR, - .minFilter = VK_FILTER_LINEAR, - .mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR, - .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, - .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, - .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, - .mipLodBias = 0.0f, - .anisotropyEnable = VK_FALSE, - .maxAnisotropy = 0.0f, - .compareEnable = VK_FALSE, - .compareOp = VK_COMPARE_OP_NEVER, - .minLod = 0.0f, - .maxLod = 0.0f, - .borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, - .unnormalizedCoordinates = VK_FALSE, - }; - - sampler = device.GetLogical().CreateSampler(ci); -} - -void FSR::CreateShaders() { - if (device.IsFloat16Supported()) { - easu_shader = BuildShader(device, VULKAN_FIDELITYFX_FSR_EASU_FP16_COMP_SPV); - rcas_shader = BuildShader(device, VULKAN_FIDELITYFX_FSR_RCAS_FP16_COMP_SPV); - } else { - easu_shader = BuildShader(device, VULKAN_FIDELITYFX_FSR_EASU_FP32_COMP_SPV); - rcas_shader = BuildShader(device, VULKAN_FIDELITYFX_FSR_RCAS_FP32_COMP_SPV); - } -} - -void FSR::CreatePipeline() { - VkPipelineShaderStageCreateInfo shader_stage_easu{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_COMPUTE_BIT, - .module = *easu_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }; - - VkPipelineShaderStageCreateInfo shader_stage_rcas{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = VK_SHADER_STAGE_COMPUTE_BIT, - .module = *rcas_shader, - .pName = "main", - .pSpecializationInfo = nullptr, - }; - - VkComputePipelineCreateInfo pipeline_ci_easu{ - .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = shader_stage_easu, - .layout = *pipeline_layout, - .basePipelineHandle = VK_NULL_HANDLE, - .basePipelineIndex = 0, - }; - - VkComputePipelineCreateInfo pipeline_ci_rcas{ - .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .stage = shader_stage_rcas, - .layout = *pipeline_layout, - .basePipelineHandle = VK_NULL_HANDLE, - .basePipelineIndex = 0, - }; - - easu_pipeline = device.GetLogical().CreateComputePipeline(pipeline_ci_easu); - rcas_pipeline = device.GetLogical().CreateComputePipeline(pipeline_ci_rcas); -} - -} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_fsr.h b/src/video_core/renderer_vulkan/vk_fsr.h deleted file mode 100644 index 3505c1416..000000000 --- a/src/video_core/renderer_vulkan/vk_fsr.h +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include "common/math_util.h" -#include "video_core/vulkan_common/vulkan_memory_allocator.h" -#include "video_core/vulkan_common/vulkan_wrapper.h" - -namespace Vulkan { - -class Device; -class Scheduler; - -class FSR { -public: - explicit FSR(const Device& device, MemoryAllocator& memory_allocator, size_t image_count, - VkExtent2D output_size); - VkImageView Draw(Scheduler& scheduler, size_t image_index, VkImageView image_view, - VkExtent2D input_image_extent, const Common::Rectangle<f32>& crop_rect); - -private: - void CreateDescriptorPool(); - void CreateDescriptorSetLayout(); - void CreateDescriptorSets(); - void CreateImages(); - void CreateSampler(); - void CreateShaders(); - void CreatePipeline(); - void CreatePipelineLayout(); - - void UpdateDescriptorSet(std::size_t image_index, VkImageView image_view) const; - - const Device& device; - MemoryAllocator& memory_allocator; - size_t image_count; - VkExtent2D output_size; - - vk::DescriptorPool descriptor_pool; - vk::DescriptorSetLayout descriptor_set_layout; - vk::DescriptorSets descriptor_sets; - vk::PipelineLayout pipeline_layout; - vk::ShaderModule easu_shader; - vk::ShaderModule rcas_shader; - vk::Pipeline easu_pipeline; - vk::Pipeline rcas_pipeline; - vk::Sampler sampler; - std::vector<vk::Image> images; - std::vector<vk::ImageView> image_views; -}; - -} // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 1e1821b10..20f7a9702 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -381,8 +381,9 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, .support_float64 = device.IsFloat64Supported(), .support_float16 = device.IsFloat16Supported(), .support_int64 = device.IsShaderInt64Supported(), - .needs_demote_reorder = - driver_id == VK_DRIVER_ID_AMD_PROPRIETARY || driver_id == VK_DRIVER_ID_AMD_OPEN_SOURCE, + .needs_demote_reorder = driver_id == VK_DRIVER_ID_AMD_PROPRIETARY || + driver_id == VK_DRIVER_ID_AMD_OPEN_SOURCE || + driver_id == VK_DRIVER_ID_SAMSUNG_PROPRIETARY, .support_snorm_render_buffer = true, .support_viewport_index_layer = device.IsExtShaderViewportIndexLayerSupported(), .min_ssbo_alignment = static_cast<u32>(device.GetStorageBufferAlignment()), diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 5bf41b81f..aa0a027bb 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -165,10 +165,9 @@ DrawParams MakeDrawParams(const MaxwellDrawState& draw_state, u32 num_instances, RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, Tegra::MaxwellDeviceMemoryManager& device_memory_, - ScreenInfo& screen_info_, const Device& device_, - MemoryAllocator& memory_allocator_, StateTracker& state_tracker_, - Scheduler& scheduler_) - : gpu{gpu_}, device_memory{device_memory_}, screen_info{screen_info_}, device{device_}, + const Device& device_, MemoryAllocator& memory_allocator_, + StateTracker& state_tracker_, Scheduler& scheduler_) + : gpu{gpu_}, device_memory{device_memory_}, device{device_}, memory_allocator{memory_allocator_}, state_tracker{state_tracker_}, scheduler{scheduler_}, staging_pool(device, memory_allocator, scheduler), descriptor_pool(device, scheduler), guest_descriptor_queue(device, scheduler), compute_pass_descriptor_queue(device, scheduler), @@ -783,23 +782,29 @@ void RasterizerVulkan::AccelerateInlineToMemory(GPUVAddr address, size_t copy_si query_cache.InvalidateRegion(*cpu_addr, copy_size); } -bool RasterizerVulkan::AccelerateDisplay(const Tegra::FramebufferConfig& config, - DAddr framebuffer_addr, u32 pixel_stride) { +std::optional<FramebufferTextureInfo> RasterizerVulkan::AccelerateDisplay( + const Tegra::FramebufferConfig& config, DAddr framebuffer_addr, u32 pixel_stride) { if (!framebuffer_addr) { - return false; + return {}; } std::scoped_lock lock{texture_cache.mutex}; - ImageView* const image_view = + const auto [image_view, scaled] = texture_cache.TryFindFramebufferImageView(config, framebuffer_addr); if (!image_view) { - return false; + return {}; } query_cache.NotifySegment(false); - screen_info.image = image_view->ImageHandle(); - screen_info.image_view = image_view->Handle(Shader::TextureType::Color2D); - screen_info.width = image_view->size.width; - screen_info.height = image_view->size.height; - return true; + + const auto& resolution = Settings::values.resolution_info; + + FramebufferTextureInfo info{}; + info.image = image_view->ImageHandle(); + info.image_view = image_view->Handle(Shader::TextureType::Color2D); + info.width = image_view->size.width; + info.height = image_view->size.height; + info.scaled_width = scaled ? resolution.ScaleUp(info.width) : info.width; + info.scaled_height = scaled ? resolution.ScaleUp(info.height) : info.height; + return info; } void RasterizerVulkan::LoadDiskResources(u64 title_id, std::stop_token stop_loading, diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index 881ee0993..0617b37f0 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h @@ -43,7 +43,7 @@ class Maxwell3D; namespace Vulkan { -struct ScreenInfo; +struct FramebufferTextureInfo; class StateTracker; @@ -78,9 +78,8 @@ class RasterizerVulkan final : public VideoCore::RasterizerInterface, public: explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, Tegra::MaxwellDeviceMemoryManager& device_memory_, - ScreenInfo& screen_info_, const Device& device_, - MemoryAllocator& memory_allocator_, StateTracker& state_tracker_, - Scheduler& scheduler_); + const Device& device_, MemoryAllocator& memory_allocator_, + StateTracker& state_tracker_, Scheduler& scheduler_); ~RasterizerVulkan() override; void Draw(bool is_indexed, u32 instance_count) override; @@ -126,8 +125,6 @@ public: Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, std::span<const u8> memory) override; - bool AccelerateDisplay(const Tegra::FramebufferConfig& config, DAddr framebuffer_addr, - u32 pixel_stride) override; void LoadDiskResources(u64 title_id, std::stop_token stop_loading, const VideoCore::DiskResourceLoadCallback& callback) override; @@ -137,6 +134,10 @@ public: void ReleaseChannel(s32 channel_id) override; + std::optional<FramebufferTextureInfo> AccelerateDisplay(const Tegra::FramebufferConfig& config, + VAddr framebuffer_addr, + u32 pixel_stride); + private: static constexpr size_t MAX_TEXTURES = 192; static constexpr size_t MAX_IMAGES = 48; @@ -182,7 +183,6 @@ private: Tegra::GPU& gpu; Tegra::MaxwellDeviceMemoryManager& device_memory; - ScreenInfo& screen_info; const Device& device; MemoryAllocator& memory_allocator; StateTracker& state_tracker; diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 7398ed2ec..a20c956ff 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -713,12 +713,12 @@ bool TextureCache<P>::BlitImage(const Tegra::Engines::Fermi2D::Surface& dst, } template <class P> -typename P::ImageView* TextureCache<P>::TryFindFramebufferImageView( +std::pair<typename P::ImageView*, bool> TextureCache<P>::TryFindFramebufferImageView( const Tegra::FramebufferConfig& config, DAddr cpu_addr) { // TODO: Properly implement this const auto it = page_table.find(cpu_addr >> YUZU_PAGEBITS); if (it == page_table.end()) { - return nullptr; + return {}; } const auto& image_map_ids = it->second; boost::container::small_vector<ImageId, 4> valid_image_ids; @@ -747,7 +747,8 @@ typename P::ImageView* TextureCache<P>::TryFindFramebufferImageView( const auto GetImageViewForFramebuffer = [&](ImageId image_id) { const ImageViewInfo info{ImageViewType::e2D, view_format}; - return &slot_image_views[FindOrEmplaceImageView(image_id, info)]; + return std::make_pair(&slot_image_views[FindOrEmplaceImageView(image_id, info)], + slot_images[image_id].IsRescaled()); }; if (valid_image_ids.size() == 1) [[likely]] { @@ -761,7 +762,7 @@ typename P::ImageView* TextureCache<P>::TryFindFramebufferImageView( return GetImageViewForFramebuffer(*most_recent); } - return nullptr; + return {}; } template <class P> @@ -1431,7 +1432,8 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DA } } }; - ForEachSparseImageInRegion(gpu_addr, size_bytes, region_check_gpu); + ForEachSparseImageInRegion(channel_state->gpu_memory.GetID(), gpu_addr, size_bytes, + region_check_gpu); bool can_rescale = info.rescaleable; bool any_rescaled = false; @@ -1842,7 +1844,7 @@ void TextureCache<P>::ForEachImageInRegionGPU(size_t as_id, GPUVAddr gpu_addr, s if (!storage_id) { return; } - auto& gpu_page_table = gpu_page_table_storage[*storage_id]; + auto& gpu_page_table = gpu_page_table_storage[*storage_id * 2]; ForEachGPUPage(gpu_addr, size, [this, &gpu_page_table, &images, gpu_addr, size, func](u64 page) { const auto it = gpu_page_table.find(page); @@ -1882,41 +1884,48 @@ void TextureCache<P>::ForEachImageInRegionGPU(size_t as_id, GPUVAddr gpu_addr, s template <class P> template <typename Func> -void TextureCache<P>::ForEachSparseImageInRegion(GPUVAddr gpu_addr, size_t size, Func&& func) { +void TextureCache<P>::ForEachSparseImageInRegion(size_t as_id, GPUVAddr gpu_addr, size_t size, + Func&& func) { using FuncReturn = typename std::invoke_result<Func, ImageId, Image&>::type; static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>; boost::container::small_vector<ImageId, 8> images; - ForEachGPUPage(gpu_addr, size, [this, &images, gpu_addr, size, func](u64 page) { - const auto it = sparse_page_table.find(page); - if (it == sparse_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; - } - }); + auto storage_id = getStorageID(as_id); + if (!storage_id) { + return; + } + auto& sparse_page_table = gpu_page_table_storage[*storage_id * 2 + 1]; + ForEachGPUPage(gpu_addr, size, + [this, &sparse_page_table, &images, gpu_addr, size, func](u64 page) { + const auto it = sparse_page_table.find(page); + if (it == sparse_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; } @@ -1988,8 +1997,9 @@ void TextureCache<P>::RegisterImage(ImageId image_id) { sparse_maps.push_back(map_id); }); sparse_views.emplace(image_id, std::move(sparse_maps)); - ForEachGPUPage(image.gpu_addr, image.guest_size_bytes, - [this, image_id](u64 page) { sparse_page_table[page].push_back(image_id); }); + ForEachGPUPage(image.gpu_addr, image.guest_size_bytes, [this, image_id](u64 page) { + (*channel_state->sparse_page_table)[page].push_back(image_id); + }); } template <class P> @@ -2042,7 +2052,7 @@ void TextureCache<P>::UnregisterImage(ImageId image_id) { return; } ForEachGPUPage(image.gpu_addr, image.guest_size_bytes, [this, &clear_page_table](u64 page) { - clear_page_table(page, sparse_page_table); + clear_page_table(page, (*channel_state->sparse_page_table)); }); auto it = sparse_views.find(image_id); ASSERT(it != sparse_views.end()); @@ -2496,13 +2506,15 @@ void TextureCache<P>::CreateChannel(struct Tegra::Control::ChannelState& channel const auto it = channel_map.find(channel.bind_id); auto* this_state = &channel_storage[it->second]; const auto& this_as_ref = address_spaces[channel.memory_manager->GetID()]; - this_state->gpu_page_table = &gpu_page_table_storage[this_as_ref.storage_id]; + this_state->gpu_page_table = &gpu_page_table_storage[this_as_ref.storage_id * 2]; + this_state->sparse_page_table = &gpu_page_table_storage[this_as_ref.storage_id * 2 + 1]; } /// Bind a channel for execution. template <class P> void TextureCache<P>::OnGPUASRegister([[maybe_unused]] size_t map_id) { gpu_page_table_storage.emplace_back(); + gpu_page_table_storage.emplace_back(); } } // namespace VideoCommon diff --git a/src/video_core/texture_cache/texture_cache_base.h b/src/video_core/texture_cache/texture_cache_base.h index 8699d40d4..e7b910121 100644 --- a/src/video_core/texture_cache/texture_cache_base.h +++ b/src/video_core/texture_cache/texture_cache_base.h @@ -86,6 +86,7 @@ public: std::unordered_map<TSCEntry, SamplerId> samplers; TextureCacheGPUMap* gpu_page_table; + TextureCacheGPUMap* sparse_page_table; }; template <class P> @@ -211,8 +212,8 @@ public: const Tegra::Engines::Fermi2D::Config& copy); /// Try to find a cached image view in the given CPU address - [[nodiscard]] ImageView* TryFindFramebufferImageView(const Tegra::FramebufferConfig& config, - DAddr cpu_addr); + [[nodiscard]] std::pair<ImageView*, bool> TryFindFramebufferImageView( + const Tegra::FramebufferConfig& config, DAddr cpu_addr); /// Return true when there are uncommitted images to be downloaded [[nodiscard]] bool HasUncommittedFlushes() const noexcept; @@ -357,7 +358,7 @@ private: void ForEachImageInRegionGPU(size_t as_id, GPUVAddr gpu_addr, size_t size, Func&& func); template <typename Func> - void ForEachSparseImageInRegion(GPUVAddr gpu_addr, size_t size, Func&& func); + void ForEachSparseImageInRegion(size_t as_id, GPUVAddr gpu_addr, size_t size, Func&& func); /// Iterates over all the images in a region calling func template <typename Func> @@ -431,7 +432,6 @@ private: std::unordered_map<RenderTargets, FramebufferId> framebuffers; std::unordered_map<u64, std::vector<ImageMapId>, Common::IdentityHash<u64>> page_table; - std::unordered_map<u64, std::vector<ImageId>, Common::IdentityHash<u64>> sparse_page_table; std::unordered_map<ImageId, boost::container::small_vector<ImageViewId, 16>> sparse_views; DAddr virtual_invalid_space{}; diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 727bbd98d..d7216d349 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -868,6 +868,8 @@ std::string Device::GetDriverName() const { return "Qualcomm"; case VK_DRIVER_ID_ARM_PROPRIETARY: return "Mali"; + case VK_DRIVER_ID_SAMSUNG_PROPRIETARY: + return "Xclipse"; case VK_DRIVER_ID_GOOGLE_SWIFTSHADER: return "SwiftShader"; case VK_DRIVER_ID_BROADCOM_PROPRIETARY: diff --git a/src/yuzu/applets/qt_profile_select.cpp b/src/yuzu/applets/qt_profile_select.cpp index 79162a491..66edd6acd 100644 --- a/src/yuzu/applets/qt_profile_select.cpp +++ b/src/yuzu/applets/qt_profile_select.cpp @@ -162,7 +162,7 @@ void QtProfileSelectionDialog::SelectUser(const QModelIndex& index) { void QtProfileSelectionDialog::SetWindowTitle( const Core::Frontend::ProfileSelectParameters& parameters) { - using Service::AM::Applets::UiMode; + using Service::AM::Frontend::UiMode; switch (parameters.mode) { case UiMode::UserCreator: case UiMode::UserCreatorForStarter: @@ -193,7 +193,7 @@ void QtProfileSelectionDialog::SetWindowTitle( void QtProfileSelectionDialog::SetDialogPurpose( const Core::Frontend::ProfileSelectParameters& parameters) { - using Service::AM::Applets::UserSelectionPurpose; + using Service::AM::Frontend::UserSelectionPurpose; switch (parameters.purpose) { case UserSelectionPurpose::GameCardRegistration: diff --git a/src/yuzu/applets/qt_software_keyboard.cpp b/src/yuzu/applets/qt_software_keyboard.cpp index ac81ace9e..2749e6ed3 100644 --- a/src/yuzu/applets/qt_software_keyboard.cpp +++ b/src/yuzu/applets/qt_software_keyboard.cpp @@ -20,7 +20,7 @@ namespace { -using namespace Service::AM::Applets; +using namespace Service::AM::Frontend; constexpr float BASE_HEADER_FONT_SIZE = 23.0f; constexpr float BASE_SUB_FONT_SIZE = 17.0f; @@ -389,7 +389,7 @@ void QtSoftwareKeyboardDialog::ShowNormalKeyboard(QPoint pos, QSize size) { } void QtSoftwareKeyboardDialog::ShowTextCheckDialog( - Service::AM::Applets::SwkbdTextCheckResult text_check_result, + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) { switch (text_check_result) { case SwkbdTextCheckResult::Success: @@ -1612,7 +1612,7 @@ void QtSoftwareKeyboard::ShowNormalKeyboard() const { } void QtSoftwareKeyboard::ShowTextCheckDialog( - Service::AM::Applets::SwkbdTextCheckResult text_check_result, + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) const { emit MainWindowShowTextCheckDialog(text_check_result, std::move(text_check_message)); } @@ -1662,12 +1662,12 @@ void QtSoftwareKeyboard::ExitKeyboard() const { emit MainWindowExitKeyboard(); } -void QtSoftwareKeyboard::SubmitNormalText(Service::AM::Applets::SwkbdResult result, +void QtSoftwareKeyboard::SubmitNormalText(Service::AM::Frontend::SwkbdResult result, std::u16string submitted_text, bool confirmed) const { submit_normal_callback(result, submitted_text, confirmed); } -void QtSoftwareKeyboard::SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type, +void QtSoftwareKeyboard::SubmitInlineText(Service::AM::Frontend::SwkbdReplyType reply_type, std::u16string submitted_text, s32 cursor_position) const { submit_inline_callback(reply_type, submitted_text, cursor_position); diff --git a/src/yuzu/applets/qt_software_keyboard.h b/src/yuzu/applets/qt_software_keyboard.h index ac23ce047..7e2fdf09e 100644 --- a/src/yuzu/applets/qt_software_keyboard.h +++ b/src/yuzu/applets/qt_software_keyboard.h @@ -39,7 +39,7 @@ public: void ShowNormalKeyboard(QPoint pos, QSize size); - void ShowTextCheckDialog(Service::AM::Applets::SwkbdTextCheckResult text_check_result, + void ShowTextCheckDialog(Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message); void ShowInlineKeyboard(Core::Frontend::InlineAppearParameters appear_parameters, QPoint pos, @@ -52,10 +52,10 @@ public: void ExitKeyboard(); signals: - void SubmitNormalText(Service::AM::Applets::SwkbdResult result, std::u16string submitted_text, + void SubmitNormalText(Service::AM::Frontend::SwkbdResult result, std::u16string submitted_text, bool confirmed = false) const; - void SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type, + void SubmitInlineText(Service::AM::Frontend::SwkbdReplyType reply_type, std::u16string submitted_text, s32 cursor_position) const; public slots: @@ -244,7 +244,7 @@ public: void ShowNormalKeyboard() const override; - void ShowTextCheckDialog(Service::AM::Applets::SwkbdTextCheckResult text_check_result, + void ShowTextCheckDialog(Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) const override; void ShowInlineKeyboard( @@ -262,8 +262,9 @@ signals: void MainWindowShowNormalKeyboard() const; - void MainWindowShowTextCheckDialog(Service::AM::Applets::SwkbdTextCheckResult text_check_result, - std::u16string text_check_message) const; + void MainWindowShowTextCheckDialog( + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, + std::u16string text_check_message) const; void MainWindowShowInlineKeyboard( Core::Frontend::InlineAppearParameters appear_parameters) const; @@ -275,10 +276,10 @@ signals: void MainWindowExitKeyboard() const; private: - void SubmitNormalText(Service::AM::Applets::SwkbdResult result, std::u16string submitted_text, + void SubmitNormalText(Service::AM::Frontend::SwkbdResult result, std::u16string submitted_text, bool confirmed) const; - void SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type, + void SubmitInlineText(Service::AM::Frontend::SwkbdReplyType reply_type, std::u16string submitted_text, s32 cursor_position) const; mutable SubmitNormalCallback submit_normal_callback; diff --git a/src/yuzu/applets/qt_web_browser.cpp b/src/yuzu/applets/qt_web_browser.cpp index 34c5fd3be..cce9b2efb 100644 --- a/src/yuzu/applets/qt_web_browser.cpp +++ b/src/yuzu/applets/qt_web_browser.cpp @@ -96,7 +96,7 @@ QtNXWebEngineView::QtNXWebEngineView(QWidget* parent, Core::System& system, [this] { if (page()->url() == url_interceptor->GetRequestedURL()) { SetFinished(true); - SetExitReason(Service::AM::Applets::WebExitReason::WindowClosed); + SetExitReason(Service::AM::Frontend::WebExitReason::WindowClosed); } }, Qt::QueuedConnection); @@ -115,7 +115,7 @@ void QtNXWebEngineView::LoadLocalWebPage(const std::string& main_url, FocusFirstLinkElement(); SetUserAgent(UserAgent::WebApplet); SetFinished(false); - SetExitReason(Service::AM::Applets::WebExitReason::EndButtonPressed); + SetExitReason(Service::AM::Frontend::WebExitReason::EndButtonPressed); SetLastURL("http://localhost/"); StartInputThread(); @@ -130,7 +130,7 @@ void QtNXWebEngineView::LoadExternalWebPage(const std::string& main_url, FocusFirstLinkElement(); SetUserAgent(UserAgent::WebApplet); SetFinished(false); - SetExitReason(Service::AM::Applets::WebExitReason::EndButtonPressed); + SetExitReason(Service::AM::Frontend::WebExitReason::EndButtonPressed); SetLastURL("http://localhost/"); StartInputThread(); @@ -170,11 +170,11 @@ void QtNXWebEngineView::SetFinished(bool finished_) { finished = finished_; } -Service::AM::Applets::WebExitReason QtNXWebEngineView::GetExitReason() const { +Service::AM::Frontend::WebExitReason QtNXWebEngineView::GetExitReason() const { return exit_reason; } -void QtNXWebEngineView::SetExitReason(Service::AM::Applets::WebExitReason exit_reason_) { +void QtNXWebEngineView::SetExitReason(Service::AM::Frontend::WebExitReason exit_reason_) { exit_reason = exit_reason_; } @@ -441,7 +441,7 @@ void QtWebBrowser::MainWindowExtractOfflineRomFS() { extract_romfs_callback(); } -void QtWebBrowser::MainWindowWebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason, +void QtWebBrowser::MainWindowWebBrowserClosed(Service::AM::Frontend::WebExitReason exit_reason, std::string 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 1234108ae..e8a0b6931 100644 --- a/src/yuzu/applets/qt_web_browser.h +++ b/src/yuzu/applets/qt_web_browser.h @@ -85,8 +85,8 @@ public: [[nodiscard]] bool IsFinished() const; void SetFinished(bool finished_); - [[nodiscard]] Service::AM::Applets::WebExitReason GetExitReason() const; - void SetExitReason(Service::AM::Applets::WebExitReason exit_reason_); + [[nodiscard]] Service::AM::Frontend::WebExitReason GetExitReason() const; + void SetExitReason(Service::AM::Frontend::WebExitReason exit_reason_); [[nodiscard]] const std::string& GetLastURL() const; void SetLastURL(std::string last_url_); @@ -176,8 +176,8 @@ private: std::atomic<bool> finished{}; - Service::AM::Applets::WebExitReason exit_reason{ - Service::AM::Applets::WebExitReason::EndButtonPressed}; + Service::AM::Frontend::WebExitReason exit_reason{ + Service::AM::Frontend::WebExitReason::EndButtonPressed}; std::string last_url{"http://localhost/"}; @@ -212,7 +212,7 @@ signals: private: void MainWindowExtractOfflineRomFS(); - void MainWindowWebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason, + void MainWindowWebBrowserClosed(Service::AM::Frontend::WebExitReason exit_reason, std::string last_url); mutable ExtractROMFSCallback extract_romfs_callback; diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp index 9b6ef47a7..c235b0fca 100644 --- a/src/yuzu/configuration/configure_audio.cpp +++ b/src/yuzu/configuration/configure_audio.cpp @@ -5,6 +5,7 @@ #include <memory> #include <vector> #include <QComboBox> +#include <QPushButton> #include "audio_core/sink/sink.h" #include "audio_core/sink/sink_details.h" @@ -67,19 +68,99 @@ void ConfigureAudio::Setup(const ConfigurationShared::Builder& builder) { hold.emplace(std::pair{setting->Id(), widget}); + auto global_sink_match = [this] { + return static_cast<Settings::AudioEngine>(sink_combo_box->currentIndex()) == + Settings::values.sink_id.GetValue(true); + }; if (setting->Id() == Settings::values.sink_id.Id()) { // TODO (lat9nq): Let the system manage sink_id sink_combo_box = widget->combobox; InitializeAudioSinkComboBox(); - connect(sink_combo_box, qOverload<int>(&QComboBox::currentIndexChanged), this, - &ConfigureAudio::UpdateAudioDevices); + if (Settings::IsConfiguringGlobal()) { + connect(sink_combo_box, qOverload<int>(&QComboBox::currentIndexChanged), this, + &ConfigureAudio::UpdateAudioDevices); + } else { + restore_sink_button = ConfigurationShared::Widget::CreateRestoreGlobalButton( + Settings::values.sink_id.UsingGlobal(), widget); + widget->layout()->addWidget(restore_sink_button); + connect(restore_sink_button, &QAbstractButton::clicked, [this](bool) { + Settings::values.sink_id.SetGlobal(true); + const int sink_index = static_cast<int>(Settings::values.sink_id.GetValue()); + sink_combo_box->setCurrentIndex(sink_index); + ConfigureAudio::UpdateAudioDevices(sink_index); + Settings::values.audio_output_device_id.SetGlobal(true); + Settings::values.audio_input_device_id.SetGlobal(true); + restore_sink_button->setVisible(false); + }); + connect(sink_combo_box, qOverload<int>(&QComboBox::currentIndexChanged), + [this, global_sink_match](const int slot) { + Settings::values.sink_id.SetGlobal(false); + Settings::values.audio_output_device_id.SetGlobal(false); + Settings::values.audio_input_device_id.SetGlobal(false); + + restore_sink_button->setVisible(true); + restore_sink_button->setEnabled(true); + output_device_combo_box->setCurrentIndex(0); + restore_output_device_button->setVisible(true); + restore_output_device_button->setEnabled(global_sink_match()); + input_device_combo_box->setCurrentIndex(0); + restore_input_device_button->setVisible(true); + restore_input_device_button->setEnabled(global_sink_match()); + ConfigureAudio::UpdateAudioDevices(slot); + }); + } } else if (setting->Id() == Settings::values.audio_output_device_id.Id()) { // Keep track of output (and input) device comboboxes to populate them with system // devices, which are determined at run time output_device_combo_box = widget->combobox; + + if (!Settings::IsConfiguringGlobal()) { + restore_output_device_button = + ConfigurationShared::Widget::CreateRestoreGlobalButton( + Settings::values.audio_output_device_id.UsingGlobal(), widget); + restore_output_device_button->setEnabled(global_sink_match()); + restore_output_device_button->setVisible( + !Settings::values.audio_output_device_id.UsingGlobal()); + widget->layout()->addWidget(restore_output_device_button); + connect(restore_output_device_button, &QAbstractButton::clicked, [this](bool) { + Settings::values.audio_output_device_id.SetGlobal(true); + SetOutputDevicesFromDeviceID(); + restore_output_device_button->setVisible(false); + }); + connect(output_device_combo_box, qOverload<int>(&QComboBox::currentIndexChanged), + [this, global_sink_match](int) { + if (updating_devices) { + return; + } + Settings::values.audio_output_device_id.SetGlobal(false); + restore_output_device_button->setVisible(true); + restore_output_device_button->setEnabled(global_sink_match()); + }); + } } else if (setting->Id() == Settings::values.audio_input_device_id.Id()) { input_device_combo_box = widget->combobox; + + if (!Settings::IsConfiguringGlobal()) { + restore_input_device_button = + ConfigurationShared::Widget::CreateRestoreGlobalButton( + Settings::values.audio_input_device_id.UsingGlobal(), widget); + widget->layout()->addWidget(restore_input_device_button); + connect(restore_input_device_button, &QAbstractButton::clicked, [this](bool) { + Settings::values.audio_input_device_id.SetGlobal(true); + SetInputDevicesFromDeviceID(); + restore_input_device_button->setVisible(false); + }); + connect(input_device_combo_box, qOverload<int>(&QComboBox::currentIndexChanged), + [this, global_sink_match](int) { + if (updating_devices) { + return; + } + Settings::values.audio_input_device_id.SetGlobal(false); + restore_input_device_button->setVisible(true); + restore_input_device_button->setEnabled(global_sink_match()); + }); + } } } @@ -89,16 +170,13 @@ void ConfigureAudio::Setup(const ConfigurationShared::Builder& builder) { } void ConfigureAudio::SetConfiguration() { - if (!Settings::IsConfiguringGlobal()) { - return; - } - SetOutputSinkFromSinkID(); // The device list cannot be pre-populated (nor listed) until the output sink is known. UpdateAudioDevices(sink_combo_box->currentIndex()); - SetAudioDevicesFromDeviceID(); + SetOutputDevicesFromDeviceID(); + SetInputDevicesFromDeviceID(); } void ConfigureAudio::SetOutputSinkFromSinkID() { @@ -116,8 +194,8 @@ void ConfigureAudio::SetOutputSinkFromSinkID() { sink_combo_box->setCurrentIndex(new_sink_index); } -void ConfigureAudio::SetAudioDevicesFromDeviceID() { - int new_device_index = -1; +void ConfigureAudio::SetOutputDevicesFromDeviceID() { + int new_device_index = 0; const QString output_device_id = QString::fromStdString(Settings::values.audio_output_device_id.GetValue()); @@ -129,8 +207,10 @@ void ConfigureAudio::SetAudioDevicesFromDeviceID() { } output_device_combo_box->setCurrentIndex(new_device_index); +} - new_device_index = -1; +void ConfigureAudio::SetInputDevicesFromDeviceID() { + int new_device_index = 0; const QString input_device_id = QString::fromStdString(Settings::values.audio_input_device_id.GetValue()); for (int index = 0; index < input_device_combo_box->count(); index++) { @@ -149,15 +229,12 @@ void ConfigureAudio::ApplyConfiguration() { apply_func(is_powered_on); } - if (Settings::IsConfiguringGlobal()) { - Settings::values.sink_id.LoadString( - sink_combo_box->itemText(sink_combo_box->currentIndex()).toStdString()); - Settings::values.audio_output_device_id.SetValue( - output_device_combo_box->itemText(output_device_combo_box->currentIndex()) - .toStdString()); - Settings::values.audio_input_device_id.SetValue( - input_device_combo_box->itemText(input_device_combo_box->currentIndex()).toStdString()); - } + Settings::values.sink_id.LoadString( + sink_combo_box->itemText(sink_combo_box->currentIndex()).toStdString()); + Settings::values.audio_output_device_id.SetValue( + output_device_combo_box->itemText(output_device_combo_box->currentIndex()).toStdString()); + Settings::values.audio_input_device_id.SetValue( + input_device_combo_box->itemText(input_device_combo_box->currentIndex()).toStdString()); } void ConfigureAudio::changeEvent(QEvent* event) { @@ -169,6 +246,7 @@ void ConfigureAudio::changeEvent(QEvent* event) { } void ConfigureAudio::UpdateAudioDevices(int sink_index) { + updating_devices = true; output_device_combo_box->clear(); output_device_combo_box->addItem(QString::fromUtf8(AudioCore::Sink::auto_device_name)); @@ -183,6 +261,7 @@ void ConfigureAudio::UpdateAudioDevices(int sink_index) { for (const auto& device : AudioCore::Sink::GetDeviceListForSink(sink_id, true)) { input_device_combo_box->addItem(QString::fromStdString(device)); } + updating_devices = false; } void ConfigureAudio::InitializeAudioSinkComboBox() { diff --git a/src/yuzu/configuration/configure_audio.h b/src/yuzu/configuration/configure_audio.h index 82d7f6524..32a2fa5f0 100644 --- a/src/yuzu/configuration/configure_audio.h +++ b/src/yuzu/configuration/configure_audio.h @@ -45,7 +45,8 @@ private: void UpdateAudioDevices(int sink_index); void SetOutputSinkFromSinkID(); - void SetAudioDevicesFromDeviceID(); + void SetOutputDevicesFromDeviceID(); + void SetInputDevicesFromDeviceID(); void Setup(const ConfigurationShared::Builder& builder); @@ -55,7 +56,11 @@ private: std::vector<std::function<void(bool)>> apply_funcs{}; + bool updating_devices = false; QComboBox* sink_combo_box; + QPushButton* restore_sink_button; QComboBox* output_device_combo_box; + QPushButton* restore_output_device_button; QComboBox* input_device_combo_box; + QPushButton* restore_input_device_button; }; diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 49ec52546..e28df10bd 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -9,6 +9,8 @@ #include "core/core.h" #include "core/hle/service/am/am.h" #include "core/hle/service/am/applet_ae.h" +#include "core/hle/service/am/applet_manager.h" +#include "core/hle/service/am/applet_message_queue.h" #include "core/hle/service/am/applet_oe.h" #include "core/hle/service/sm/sm.h" #include "hid_core/frontend/emulated_controller.h" @@ -47,22 +49,8 @@ void OnDockedModeChanged(bool last_state, bool new_state, Core::System& system) if (!system.IsPoweredOn()) { return; } - Service::SM::ServiceManager& sm = system.ServiceManager(); - // Message queue is shared between these services, we just need to signal an operation - // change to one and it will handle both automatically - auto applet_oe = sm.GetService<Service::AM::AppletOE>("appletOE"); - auto applet_ae = sm.GetService<Service::AM::AppletAE>("appletAE"); - bool has_signalled = false; - - if (applet_oe != nullptr) { - applet_oe->GetMessageQueue()->OperationModeChanged(); - has_signalled = true; - } - - if (applet_ae != nullptr && !has_signalled) { - applet_ae->GetMessageQueue()->OperationModeChanged(); - } + system.GetAppletManager().OperationModeChanged(); } ConfigureInput::ConfigureInput(Core::System& system_, QWidget* parent) diff --git a/src/yuzu/game_list.cpp b/src/yuzu/game_list.cpp index 59b317135..b40af957c 100644 --- a/src/yuzu/game_list.cpp +++ b/src/yuzu/game_list.cpp @@ -596,14 +596,10 @@ void GameList::AddGamePopup(QMenu& context_menu, u64 program_id, const std::stri connect(open_save_location, &QAction::triggered, [this, program_id, path]() { emit OpenFolderRequested(program_id, GameListOpenTarget::SaveData, path); }); - connect(start_game, &QAction::triggered, [this, path]() { - emit BootGame(QString::fromStdString(path), 0, 0, StartGameType::Normal, - AmLaunchType::UserInitiated); - }); - connect(start_game_global, &QAction::triggered, [this, path]() { - emit BootGame(QString::fromStdString(path), 0, 0, StartGameType::Global, - AmLaunchType::UserInitiated); - }); + connect(start_game, &QAction::triggered, + [this, path]() { emit BootGame(QString::fromStdString(path), StartGameType::Normal); }); + connect(start_game_global, &QAction::triggered, + [this, path]() { emit BootGame(QString::fromStdString(path), StartGameType::Global); }); connect(open_mod_location, &QAction::triggered, [this, program_id, path]() { emit OpenFolderRequested(program_id, GameListOpenTarget::ModData, path); }); diff --git a/src/yuzu/game_list.h b/src/yuzu/game_list.h index 563a3a35b..79f9c7ec0 100644 --- a/src/yuzu/game_list.h +++ b/src/yuzu/game_list.h @@ -106,8 +106,7 @@ public: static const QStringList supported_file_extensions; signals: - void BootGame(const QString& game_path, u64 program_id, std::size_t program_index, - StartGameType type, AmLaunchType launch_type); + void BootGame(const QString& game_path, StartGameType type); void GameChosen(const QString& game_path, const u64 title_id = 0); void OpenFolderRequested(u64 program_id, GameListOpenTarget target, const std::string& game_path); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 782bcbb61..13381fea8 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -8,6 +8,7 @@ #include <iostream> #include <memory> #include <thread> +#include "core/hle/service/am/applet_manager.h" #include "core/loader/nca.h" #include "core/tools/renderdoc.h" @@ -39,13 +40,14 @@ #include "core/file_sys/vfs/vfs_real.h" #include "core/frontend/applets/cabinet.h" #include "core/frontend/applets/controller.h" -#include "core/frontend/applets/general_frontend.h" +#include "core/frontend/applets/general.h" #include "core/frontend/applets/mii_edit.h" #include "core/frontend/applets/software_keyboard.h" #include "core/hle/service/acc/profile_manager.h" #include "core/hle/service/am/applet_ae.h" +#include "core/hle/service/am/applet_message_queue.h" #include "core/hle/service/am/applet_oe.h" -#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/am/frontend/applets.h" #include "core/hle/service/set/system_settings_server.h" #include "frontend_common/content_manager.h" #include "hid_core/frontend/emulated_controller.h" @@ -568,7 +570,7 @@ GMainWindow::GMainWindow(std::unique_ptr<QtConfig> config_, bool has_broken_vulk } if (!game_path.isEmpty()) { - BootGame(game_path); + BootGame(game_path, ApplicationAppletParameters()); } } @@ -630,13 +632,14 @@ void GMainWindow::RegisterMetaTypes() { qRegisterMetaType<Core::Frontend::InlineAppearParameters>( "Core::Frontend::InlineAppearParameters"); qRegisterMetaType<Core::Frontend::InlineTextParameters>("Core::Frontend::InlineTextParameters"); - qRegisterMetaType<Service::AM::Applets::SwkbdResult>("Service::AM::Applets::SwkbdResult"); - qRegisterMetaType<Service::AM::Applets::SwkbdTextCheckResult>( - "Service::AM::Applets::SwkbdTextCheckResult"); - qRegisterMetaType<Service::AM::Applets::SwkbdReplyType>("Service::AM::Applets::SwkbdReplyType"); + qRegisterMetaType<Service::AM::Frontend::SwkbdResult>("Service::AM::Frontend::SwkbdResult"); + qRegisterMetaType<Service::AM::Frontend::SwkbdTextCheckResult>( + "Service::AM::Frontend::SwkbdTextCheckResult"); + qRegisterMetaType<Service::AM::Frontend::SwkbdReplyType>( + "Service::AM::Frontend::SwkbdReplyType"); // Web Browser Applet - qRegisterMetaType<Service::AM::Applets::WebExitReason>("Service::AM::Applets::WebExitReason"); + qRegisterMetaType<Service::AM::Frontend::WebExitReason>("Service::AM::Frontend::WebExitReason"); // Register loader types qRegisterMetaType<Core::SystemResultStatus>("Core::SystemResultStatus"); @@ -746,7 +749,7 @@ void GMainWindow::SoftwareKeyboardInitialize( if (is_inline) { connect( software_keyboard, &QtSoftwareKeyboardDialog::SubmitInlineText, this, - [this](Service::AM::Applets::SwkbdReplyType reply_type, std::u16string submitted_text, + [this](Service::AM::Frontend::SwkbdReplyType reply_type, std::u16string submitted_text, s32 cursor_position) { emit SoftwareKeyboardSubmitInlineText(reply_type, submitted_text, cursor_position); }, @@ -754,7 +757,7 @@ void GMainWindow::SoftwareKeyboardInitialize( } else { connect( software_keyboard, &QtSoftwareKeyboardDialog::SubmitNormalText, this, - [this](Service::AM::Applets::SwkbdResult result, std::u16string submitted_text, + [this](Service::AM::Frontend::SwkbdResult result, std::u16string submitted_text, bool confirmed) { emit SoftwareKeyboardSubmitNormalText(result, submitted_text, confirmed); }, @@ -781,7 +784,7 @@ void GMainWindow::SoftwareKeyboardShowNormal() { } void GMainWindow::SoftwareKeyboardShowTextCheck( - Service::AM::Applets::SwkbdTextCheckResult text_check_result, + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, std::u16string text_check_message) { if (!software_keyboard) { LOG_ERROR(Frontend, "The software keyboard is not initialized!"); @@ -852,7 +855,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, // Raw input breaks with the web applet, Disable web applets if enabled if (UISettings::values.disable_web_applet || Settings::values.enable_raw_input) { - emit WebBrowserClosed(Service::AM::Applets::WebExitReason::WindowClosed, + emit WebBrowserClosed(Service::AM::Frontend::WebExitReason::WindowClosed, "http://localhost/"); return; } @@ -940,7 +943,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, if (variant.toBool()) { web_applet->SetFinished(true); web_applet->SetExitReason( - Service::AM::Applets::WebExitReason::EndButtonPressed); + Service::AM::Frontend::WebExitReason::EndButtonPressed); } }); @@ -950,7 +953,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, if (web_applet->GetCurrentURL().contains(QStringLiteral("localhost"))) { if (!web_applet->IsFinished()) { web_applet->SetFinished(true); - web_applet->SetExitReason(Service::AM::Applets::WebExitReason::CallbackURL); + web_applet->SetExitReason(Service::AM::Frontend::WebExitReason::CallbackURL); } web_applet->SetLastURL(web_applet->GetCurrentURL().toStdString()); @@ -983,7 +986,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, #else // Utilize the same fallback as the default web browser applet. - emit WebBrowserClosed(Service::AM::Applets::WebExitReason::WindowClosed, "http://localhost/"); + emit WebBrowserClosed(Service::AM::Frontend::WebExitReason::WindowClosed, "http://localhost/"); #endif } @@ -991,7 +994,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, void GMainWindow::WebBrowserRequestExit() { #ifdef YUZU_USE_QT_WEB_ENGINE if (web_applet) { - web_applet->SetExitReason(Service::AM::Applets::WebExitReason::ExitRequested); + web_applet->SetExitReason(Service::AM::Frontend::WebExitReason::ExitRequested); web_applet->SetFinished(true); } #endif @@ -1350,6 +1353,13 @@ void GMainWindow::InitializeHotkeys() { LinkActionShortcut(ui->action_TAS_Start, QStringLiteral("TAS Start/Stop"), true); LinkActionShortcut(ui->action_TAS_Record, QStringLiteral("TAS Record"), true); LinkActionShortcut(ui->action_TAS_Reset, QStringLiteral("TAS Reset"), true); + LinkActionShortcut(ui->action_View_Lobby, + QStringLiteral("Multiplayer Browse Public Game Lobby")); + LinkActionShortcut(ui->action_Start_Room, QStringLiteral("Multiplayer Create Room")); + LinkActionShortcut(ui->action_Connect_To_Room, + QStringLiteral("Multiplayer Direct Connect to Room")); + LinkActionShortcut(ui->action_Show_Room, QStringLiteral("Multiplayer Show Current Room")); + LinkActionShortcut(ui->action_Leave_Room, QStringLiteral("Multiplayer Leave Room")); static const QString main_window = QStringLiteral("Main Window"); const auto connect_shortcut = [&]<typename Fn>(const QString& action_name, const Fn& function) { @@ -1472,7 +1482,7 @@ void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { } void GMainWindow::ConnectWidgetEvents() { - connect(game_list, &GameList::BootGame, this, &GMainWindow::BootGame); + connect(game_list, &GameList::BootGame, this, &GMainWindow::BootGameFromList); connect(game_list, &GameList::GameChosen, this, &GMainWindow::OnGameListLoadFile); connect(game_list, &GameList::OpenDirectory, this, &GMainWindow::OnGameListOpenDirectory); connect(game_list, &GameList::OpenFolderRequested, this, &GMainWindow::OnGameListOpenFolder); @@ -1760,8 +1770,7 @@ void GMainWindow::AllowOSSleep() { #endif } -bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t program_index, - AmLaunchType launch_type) { +bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletParameters params) { // Shutdown previous session if the emu thread is still active... if (emu_thread != nullptr) { ShutdownGame(); @@ -1773,11 +1782,11 @@ bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t p system->SetFilesystem(vfs); - if (launch_type == AmLaunchType::UserInitiated) { + if (params.launch_type == Service::AM::LaunchType::FrontendInitiated) { system->GetUserChannel().clear(); } - system->SetAppletFrontendSet({ + system->SetFrontendAppletSet({ std::make_unique<QtAmiiboSettings>(*this), // Amiibo Settings (UISettings::values.controller_applet_disabled.GetValue() == true) ? nullptr @@ -1792,7 +1801,7 @@ bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t p }); const Core::SystemResultStatus result{ - system->Load(*render_window, filename.toStdString(), program_id, program_index)}; + system->Load(*render_window, filename.toStdString(), params)}; const auto drd_callout = (UISettings::values.callout_flags.GetValue() & static_cast<u32>(CalloutFlag::DRDDeprecation)) == 0; @@ -1915,12 +1924,12 @@ void GMainWindow::ConfigureFilesystemProvider(const std::string& filepath) { } } -void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t program_index, - StartGameType type, AmLaunchType launch_type) { +void GMainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletParameters params, + StartGameType type) { LOG_INFO(Frontend, "yuzu starting..."); - if (program_id == 0 || - program_id > static_cast<u64>(Service::AM::Applets::AppletProgramId::MaxProgramId)) { + if (params.program_id == 0 || + params.program_id > static_cast<u64>(Service::AM::AppletProgramId::MaxProgramId)) { StoreRecentFile(filename); // Put the filename on top of the list } @@ -1935,7 +1944,7 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t ConfigureFilesystemProvider(filename.toStdString()); const auto v_file = Core::GetGameFileFromPath(vfs, filename.toUtf8().constData()); - const auto loader = Loader::GetLoader(*system, v_file, program_id, program_index); + const auto loader = Loader::GetLoader(*system, v_file, params.program_id, params.program_index); if (loader != nullptr && loader->ReadProgramId(title_id) == Loader::ResultStatus::Success && type == StartGameType::Normal) { @@ -1954,10 +1963,10 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t if (UISettings::values.select_user_on_boot && !user_flag_cmd_line) { const Core::Frontend::ProfileSelectParameters parameters{ - .mode = Service::AM::Applets::UiMode::UserSelector, + .mode = Service::AM::Frontend::UiMode::UserSelector, .invalid_uid_list = {}, .display_options = {}, - .purpose = Service::AM::Applets::UserSelectionPurpose::General, + .purpose = Service::AM::Frontend::UserSelectionPurpose::General, }; if (SelectAndSetCurrentUser(parameters) == false) { return; @@ -1969,7 +1978,7 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t // behavior of asking. user_flag_cmd_line = false; - if (!LoadROM(filename, program_id, program_index, launch_type)) { + if (!LoadROM(filename, params)) { return; } @@ -2059,6 +2068,10 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t OnStartGame(); } +void GMainWindow::BootGameFromList(const QString& filename, StartGameType with_config) { + BootGame(filename, ApplicationAppletParameters(), with_config); +} + bool GMainWindow::OnShutdownBegin() { if (!emulation_running) { return false; @@ -2160,7 +2173,7 @@ void GMainWindow::OnEmulationStopped() { OnTasStateChanged(); render_window->FinalizeCamera(); - system->GetAppletManager().SetCurrentAppletId(Service::AM::Applets::AppletId::None); + system->GetFrontendAppletHolder().SetCurrentAppletId(Service::AM::AppletId::None); // Enable all controllers system->HIDCore().SetSupportedStyleTag({Core::HID::NpadStyleSet::All}); @@ -2239,7 +2252,10 @@ void GMainWindow::UpdateRecentFiles() { } void GMainWindow::OnGameListLoadFile(QString game_path, u64 program_id) { - BootGame(game_path, program_id); + auto params = ApplicationAppletParameters(); + params.program_id = program_id; + + BootGame(game_path, params); } void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target, @@ -2280,10 +2296,10 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target // User save data const auto select_profile = [this] { const Core::Frontend::ProfileSelectParameters parameters{ - .mode = Service::AM::Applets::UiMode::UserSelector, + .mode = Service::AM::Frontend::UiMode::UserSelector, .invalid_uid_list = {}, .display_options = {}, - .purpose = Service::AM::Applets::UserSelectionPurpose::General, + .purpose = Service::AM::Frontend::UserSelectionPurpose::General, }; QtProfileSelectionDialog dialog(*system, this, parameters); dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | @@ -3171,7 +3187,7 @@ void GMainWindow::OnMenuLoadFile() { } UISettings::values.roms_path = QFileInfo(filename).path().toStdString(); - BootGame(filename); + BootGame(filename, ApplicationAppletParameters()); } void GMainWindow::OnMenuLoadFolder() { @@ -3185,7 +3201,7 @@ void GMainWindow::OnMenuLoadFolder() { const QDir dir{dir_path}; const QStringList matching_main = dir.entryList({QStringLiteral("main")}, QDir::Files); if (matching_main.size() == 1) { - BootGame(dir.path() + QDir::separator() + matching_main[0]); + BootGame(dir.path() + QDir::separator() + matching_main[0], ApplicationAppletParameters()); } else { QMessageBox::warning(this, tr("Invalid Directory Selected"), tr("The directory you have selected does not contain a 'main' file.")); @@ -3379,7 +3395,7 @@ void GMainWindow::OnMenuRecentFile() { const QString filename = action->data().toString(); if (QFileInfo::exists(filename)) { - BootGame(filename); + BootGame(filename, ApplicationAppletParameters()); } else { // Display an error message and remove the file from the list. QMessageBox::information(this, tr("File not found"), @@ -3417,7 +3433,7 @@ void GMainWindow::OnRestartGame() { // Make a copy since ShutdownGame edits game_path const auto current_game = QString(current_game_path); ShutdownGame(); - BootGame(current_game); + BootGame(current_game, ApplicationAppletParameters()); } } @@ -3485,8 +3501,11 @@ void GMainWindow::OnLoadComplete() { void GMainWindow::OnExecuteProgram(std::size_t program_index) { ShutdownGame(); - BootGame(last_filename_booted, 0, program_index, StartGameType::Normal, - AmLaunchType::ApplicationInitiated); + + auto params = ApplicationAppletParameters(); + params.program_index = static_cast<s32>(program_index); + params.launch_type = Service::AM::LaunchType::ApplicationInitiated; + BootGame(last_filename_booted, params); } void GMainWindow::OnExit() { @@ -4153,7 +4172,7 @@ void GMainWindow::OnToggleStatusBar() { } void GMainWindow::OnAlbum() { - constexpr u64 AlbumId = static_cast<u64>(Service::AM::Applets::AppletProgramId::PhotoViewer); + constexpr u64 AlbumId = static_cast<u64>(Service::AM::AppletProgramId::PhotoViewer); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { QMessageBox::warning(this, tr("No firmware available"), @@ -4168,15 +4187,15 @@ void GMainWindow::OnAlbum() { return; } - system->GetAppletManager().SetCurrentAppletId(Service::AM::Applets::AppletId::PhotoViewer); + system->GetFrontendAppletHolder().SetCurrentAppletId(Service::AM::AppletId::PhotoViewer); const auto filename = QString::fromStdString(album_nca->GetFullPath()); UISettings::values.roms_path = QFileInfo(filename).path().toStdString(); - BootGame(filename, AlbumId); + BootGame(filename, LibraryAppletParameters(AlbumId, Service::AM::AppletId::PhotoViewer)); } void GMainWindow::OnCabinet(Service::NFP::CabinetMode mode) { - constexpr u64 CabinetId = static_cast<u64>(Service::AM::Applets::AppletProgramId::Cabinet); + constexpr u64 CabinetId = static_cast<u64>(Service::AM::AppletProgramId::Cabinet); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { QMessageBox::warning(this, tr("No firmware available"), @@ -4191,16 +4210,16 @@ void GMainWindow::OnCabinet(Service::NFP::CabinetMode mode) { return; } - system->GetAppletManager().SetCurrentAppletId(Service::AM::Applets::AppletId::Cabinet); - system->GetAppletManager().SetCabinetMode(mode); + system->GetFrontendAppletHolder().SetCurrentAppletId(Service::AM::AppletId::Cabinet); + system->GetFrontendAppletHolder().SetCabinetMode(mode); const auto filename = QString::fromStdString(cabinet_nca->GetFullPath()); UISettings::values.roms_path = QFileInfo(filename).path().toStdString(); - BootGame(filename, CabinetId); + BootGame(filename, LibraryAppletParameters(CabinetId, Service::AM::AppletId::Cabinet)); } void GMainWindow::OnMiiEdit() { - constexpr u64 MiiEditId = static_cast<u64>(Service::AM::Applets::AppletProgramId::MiiEdit); + constexpr u64 MiiEditId = static_cast<u64>(Service::AM::AppletProgramId::MiiEdit); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { QMessageBox::warning(this, tr("No firmware available"), @@ -4215,16 +4234,15 @@ void GMainWindow::OnMiiEdit() { return; } - system->GetAppletManager().SetCurrentAppletId(Service::AM::Applets::AppletId::MiiEdit); + system->GetFrontendAppletHolder().SetCurrentAppletId(Service::AM::AppletId::MiiEdit); const auto filename = QString::fromStdString((mii_applet_nca->GetFullPath())); UISettings::values.roms_path = QFileInfo(filename).path().toStdString(); - BootGame(filename, MiiEditId); + BootGame(filename, LibraryAppletParameters(MiiEditId, Service::AM::AppletId::MiiEdit)); } void GMainWindow::OnOpenControllerMenu() { - constexpr u64 ControllerAppletId = - static_cast<u64>(Service::AM::Applets::AppletProgramId::Controller); + constexpr u64 ControllerAppletId = static_cast<u64>(Service::AM::AppletProgramId::Controller); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { QMessageBox::warning(this, tr("No firmware available"), @@ -4240,11 +4258,12 @@ void GMainWindow::OnOpenControllerMenu() { return; } - system->GetAppletManager().SetCurrentAppletId(Service::AM::Applets::AppletId::Controller); + system->GetFrontendAppletHolder().SetCurrentAppletId(Service::AM::AppletId::Controller); const auto filename = QString::fromStdString((controller_applet_nca->GetFullPath())); UISettings::values.roms_path = QFileInfo(filename).path().toStdString(); - BootGame(filename, ControllerAppletId); + BootGame(filename, + LibraryAppletParameters(ControllerAppletId, Service::AM::AppletId::Controller)); } void GMainWindow::OnCaptureScreenshot() { @@ -4564,7 +4583,7 @@ void GMainWindow::OnCheckFirmwareDecryption() { } bool GMainWindow::CheckFirmwarePresence() { - constexpr u64 MiiEditId = static_cast<u64>(Service::AM::Applets::AppletProgramId::MiiEdit); + constexpr u64 MiiEditId = static_cast<u64>(Service::AM::AppletProgramId::MiiEdit); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { @@ -4727,7 +4746,7 @@ bool GMainWindow::DropAction(QDropEvent* event) { } else { // Game if (ConfirmChangeGame()) { - BootGame(filename); + BootGame(filename, ApplicationAppletParameters()); } } return true; @@ -4771,36 +4790,12 @@ void GMainWindow::RequestGameExit() { return; } - auto& sm{system->ServiceManager()}; - auto applet_oe = sm.GetService<Service::AM::AppletOE>("appletOE"); - auto applet_ae = sm.GetService<Service::AM::AppletAE>("appletAE"); - bool has_signalled = false; - system->SetExitRequested(true); - - if (applet_oe != nullptr) { - applet_oe->GetMessageQueue()->RequestExit(); - has_signalled = true; - } - - if (applet_ae != nullptr && !has_signalled) { - applet_ae->GetMessageQueue()->RequestExit(); - } + system->GetAppletManager().RequestExit(); } void GMainWindow::RequestGameResume() { - auto& sm{system->ServiceManager()}; - auto applet_oe = sm.GetService<Service::AM::AppletOE>("appletOE"); - auto applet_ae = sm.GetService<Service::AM::AppletAE>("appletAE"); - - if (applet_oe != nullptr) { - applet_oe->GetMessageQueue()->RequestResume(); - return; - } - - if (applet_ae != nullptr) { - applet_ae->GetMessageQueue()->RequestResume(); - } + system->GetAppletManager().RequestResume(); } void GMainWindow::filterBarSetChecked(bool state) { @@ -4942,6 +4937,22 @@ void GMainWindow::changeEvent(QEvent* event) { QWidget::changeEvent(event); } +Service::AM::FrontendAppletParameters GMainWindow::ApplicationAppletParameters() { + return Service::AM::FrontendAppletParameters{ + .applet_id = Service::AM::AppletId::Application, + .applet_type = Service::AM::AppletType::Application, + }; +} + +Service::AM::FrontendAppletParameters GMainWindow::LibraryAppletParameters( + u64 program_id, Service::AM::AppletId applet_id) { + return Service::AM::FrontendAppletParameters{ + .program_id = program_id, + .applet_id = applet_id, + .applet_type = Service::AM::AppletType::LibraryApplet, + }; +} + void VolumeButton::wheelEvent(QWheelEvent* event) { int num_degrees = event->angleDelta().y() / 8; diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 6b72094ff..aba61e388 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -64,11 +64,6 @@ enum class StartGameType { Global, // Only uses global configuration }; -enum class AmLaunchType { - UserInitiated, - ApplicationInitiated, -}; - namespace Core { enum class SystemResultStatus : u32; class System; @@ -101,12 +96,17 @@ namespace InputCommon { class InputSubsystem; } -namespace Service::AM::Applets { +namespace Service::AM { +struct FrontendAppletParameters; +enum class AppletId : u32; +} // namespace Service::AM + +namespace Service::AM::Frontend { enum class SwkbdResult : u32; enum class SwkbdTextCheckResult : u32; enum class SwkbdReplyType : u32; enum class WebExitReason : u32; -} // namespace Service::AM::Applets +} // namespace Service::AM::Frontend namespace Service::NFC { class NfcDevice; @@ -204,13 +204,13 @@ signals: void ProfileSelectorFinishedSelection(std::optional<Common::UUID> uuid); - void SoftwareKeyboardSubmitNormalText(Service::AM::Applets::SwkbdResult result, + void SoftwareKeyboardSubmitNormalText(Service::AM::Frontend::SwkbdResult result, std::u16string submitted_text, bool confirmed); - void SoftwareKeyboardSubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type, + void SoftwareKeyboardSubmitInlineText(Service::AM::Frontend::SwkbdReplyType reply_type, std::u16string submitted_text, s32 cursor_position); void WebBrowserExtractOfflineRomFS(); - void WebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason, std::string last_url); + void WebBrowserClosed(Service::AM::Frontend::WebExitReason exit_reason, std::string last_url); void SigInterrupt(); @@ -228,8 +228,9 @@ public slots: void SoftwareKeyboardInitialize( bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters); void SoftwareKeyboardShowNormal(); - void SoftwareKeyboardShowTextCheck(Service::AM::Applets::SwkbdTextCheckResult text_check_result, - std::u16string text_check_message); + void SoftwareKeyboardShowTextCheck( + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, + std::u16string text_check_message); void SoftwareKeyboardShowInline(Core::Frontend::InlineAppearParameters appear_parameters); void SoftwareKeyboardHideInline(); void SoftwareKeyboardInlineTextChanged(Core::Frontend::InlineTextParameters text_parameters); @@ -267,11 +268,10 @@ private: void PreventOSSleep(); void AllowOSSleep(); - bool LoadROM(const QString& filename, u64 program_id, std::size_t program_index, - AmLaunchType launch_type); - void BootGame(const QString& filename, u64 program_id = 0, std::size_t program_index = 0, - StartGameType with_config = StartGameType::Normal, - AmLaunchType launch_type = AmLaunchType::UserInitiated); + bool LoadROM(const QString& filename, Service::AM::FrontendAppletParameters params); + void BootGame(const QString& filename, Service::AM::FrontendAppletParameters params, + StartGameType with_config = StartGameType::Normal); + void BootGameFromList(const QString& filename, StartGameType with_config); void ShutdownGame(); void ShowTelemetryCallout(); @@ -324,6 +324,10 @@ private: void SetGamemodeEnabled(bool state); #endif + Service::AM::FrontendAppletParameters ApplicationAppletParameters(); + Service::AM::FrontendAppletParameters LibraryAppletParameters(u64 program_id, + Service::AM::AppletId applet_id); + private slots: void OnStartGame(); void OnRestartGame(); diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index bd8b3c18a..03e42b930 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -229,7 +229,7 @@ void RestoreWindowState(std::unique_ptr<QtConfig>& qtConfig); // This must be in alphabetical order according to action name as it must have the same order as // UISetting::values.shortcuts, which is alphabetically ordered. // clang-format off -const std::array<Shortcut, 23> default_hotkeys{{ +const std::array<Shortcut, 28> default_hotkeys{{ {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Audio Mute/Unmute")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+M"), std::string("Home+Dpad_Right"), Qt::WindowShortcut, false}}, {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Audio Volume Down")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("-"), std::string("Home+Dpad_Down"), Qt::ApplicationShortcut, true}}, {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Audio Volume Up")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("="), std::string("Home+Dpad_Up"), Qt::ApplicationShortcut, true}}, @@ -243,6 +243,11 @@ const std::array<Shortcut, 23> default_hotkeys{{ {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Fullscreen")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F11"), std::string("Home+B"), Qt::WindowShortcut, false}}, {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Load File")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+O"), std::string(""), Qt::WidgetWithChildrenShortcut, false}}, {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Load/Remove Amiibo")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F2"), std::string("Home+A"), Qt::WidgetWithChildrenShortcut, false}}, + {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Multiplayer Browse Public Game Lobby")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+B"), std::string(""), Qt::ApplicationShortcut, false}}, + {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Multiplayer Create Room")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+N"), std::string(""), Qt::ApplicationShortcut, false}}, + {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Multiplayer Direct Connect to Room")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+C"), std::string(""), Qt::ApplicationShortcut, false}}, + {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Multiplayer Leave Room")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+L"), std::string(""), Qt::ApplicationShortcut, false}}, + {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Multiplayer Show Current Room")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+R"), std::string(""), Qt::ApplicationShortcut, false}}, {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Restart Emulation")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F6"), std::string("R+Plus+Minus"), Qt::WindowShortcut, false}}, {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Stop Emulation")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F5"), std::string("L+Plus+Minus"), Qt::WindowShortcut, false}}, {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "TAS Record")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+F7"), std::string(""), Qt::ApplicationShortcut, false}}, diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp index c39ace2ec..3b321dad1 100644 --- a/src/yuzu_cmd/yuzu.cpp +++ b/src/yuzu_cmd/yuzu.cpp @@ -26,6 +26,7 @@ #include "core/crypto/key_manager.h" #include "core/file_sys/registered_cache.h" #include "core/file_sys/vfs/vfs_real.h" +#include "core/hle/service/am/applet_manager.h" #include "core/hle/service/filesystem/filesystem.h" #include "core/loader/loader.h" #include "core/telemetry_session.h" @@ -366,7 +367,10 @@ int main(int argc, char** argv) { system.GetFileSystemController().CreateFactories(*system.GetFilesystem()); system.GetUserChannel().clear(); - const Core::SystemResultStatus load_result{system.Load(*emu_window, filepath)}; + Service::AM::FrontendAppletParameters load_parameters{ + .applet_id = Service::AM::AppletId::Application, + }; + const Core::SystemResultStatus load_result{system.Load(*emu_window, filepath, load_parameters)}; switch (load_result) { case Core::SystemResultStatus::ErrorGetLoader: |