Compare commits

..

75 commits

Author SHA1 Message Date
jbm11208
e24f8da113
Add per-title vulkan pipeline cache (#1118) 2025-06-23 20:51:25 +02:00
Qidi
680cbb559d
Fix aac_decoder memory leak (#1167)
* Fix aac_decoder memory leak

Only call NeAACDecInit on the first AAC frame and create new NeAACDecoder on DecoderCommand::Init request

* update license headers

* fix oversight

* reorganized code

-put open new FAAD2 AAC decoder code into a separate function
-removed LOG_INFO for open/close FAAD2 AAC decoder
-added LOG_ERROR when no decoder is created to handle decode request, either decoder creation failed or DecoderCommand::Init command not received

* Update aac_decoder.cpp

fix clang coding style check

* fix load savestate

Loading a savestate creates a situation where decode requests aren't preceded by an init request, so we open a new decoder by default in the constructor. A new AACDecoder instance is always constructed on load savestate.
2025-06-21 11:50:39 +01:00
OpenSauce04
9dc9bf3baf Updated language translations via Transifex 2025-06-20 23:24:51 +01:00
PabloMK7
5f81ac40c8
rasterizer: Increase uniform buffer size (#1174) 2025-06-20 22:10:04 +02:00
PabloMK7
0deb0f50b8
Add "SWP" frame time information (#1173) 2025-06-20 19:26:12 +02:00
kleidis
2b51691d57
android: Fix hotkey presses opening nav drawer even after being bound (#1122)
* android: Fix hotkey presses opening nav drawer even after being bound

* Removed unnecessary return

---------

Co-authored-by: Kleidis <167202775+kleidis@users.noreply.github.com>
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
2025-06-19 23:48:18 +01:00
marsia
11687fe32b android: Add landscape layout for setup pages 2025-06-19 21:14:26 +00:00
OpenSauce04
9d4d6c5fdc externals: Update libyuv to latest commit
Fixes an Android build failure while using CMake >=4.0
2025-06-19 21:06:10 +00:00
PabloMK7
f26b9b174a
cmake: Bump min version to 3.25 globally and to 3.30.3 for android (#1151)
* cmake: Bump min version to 3.25 and update android to 3.30.3

* app/build.gradle.kts: Set minimum CMake version rather than exact version

---------

Co-authored-by: OpenSauce <opensauce04@gmail.com>
2025-06-18 21:44:42 +02:00
qr243vbi
ce8798fffe
Replace deprecated and removed in boost 1.88 io_service to io_context (#1126)
* Replace deprecated and removed in boost 1.88 io_service for io_context

* More thoroughly replaced references to io_service with io_context

* Updated license header

---------

Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
2025-06-17 18:41:22 +00:00
PabloMK7
3c3dd2bd86
am: Improve cia encrypted content detection (#1152) 2025-06-17 14:17:01 +02:00
OpenSauce04
eec1466b7b Updated language translations via Transifex 2025-06-16 16:08:56 +01:00
OpenSauce04
5910edb9fa android: Fixed accurate multiplication setting using async shader value 2025-06-13 11:16:42 +01:00
OpenSauce04
63f52580ca qt: Renamed toggle console setting name to be more accurate 2025-06-09 20:19:40 +01:00
OpenSauce04
d1b80788f6 ci: Corrected Windows Vulkan SDK URL which was taken down by upstream 2025-06-09 19:29:08 +01:00
OpenSauce04
7eff38ed10 Updated language translations via Transifex 2025-06-08 18:16:44 +01:00
PabloMK7
995538fa3e
vulkan: Report error code on Vulkan::CreateSurface (#1130) 2025-06-08 17:23:17 +02:00
PabloMK7
57105076a0
frontend: Save RPC setting to config file (#1129) 2025-06-08 12:10:39 +02:00
OpenSauce04
868e946dee app/build.gradle.kts: Fixed incorrect usage of layout.buildDirectory 2025-06-06 12:37:54 +01:00
PabloMK7
fe7fe3ed24
android: Fix crash when user directory permissions are lost (#1110)
* android: Fix crash when user directory permissions are lost

---------

Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
2025-06-03 23:06:46 +02:00
OpenSauce04
2acbcd333c app/build.gradle.kts: Removed now-obsolete isMinifyEnabled value from relWithDebInfo build variant 2025-06-03 21:48:33 +01:00
OpenSauce04
7853bacddd app/build.gradle.kts: Replaced deprecated buildDir value with layout.buildDirectory 2025-06-03 21:48:33 +01:00
OpenSauce04
d827b63044 Migrate deprecated buildconfig value in gradle.properties to build.gradle.kts 2025-06-03 21:48:33 +01:00
OpenSauce04
14e8ee7fe3 cmake: Suppress -Wpsabi warnings when building with GCC 2025-06-03 20:58:30 +01:00
RedBlackAka
bc1edd1f1a
Fix and restore macOS native menu (#1111)
* Fix and restore macOS native menu

* Handle menu more elegantly by making norole default

Handle menu roles more universally by making norole default and manually define previously automatically assigned roles
2025-06-03 18:12:24 +01:00
OpenSauce04
cfe767e301 Updated translations via Transifex 2025-05-31 18:54:12 +01:00
OpenSauce04
063a80695c Updated outdated Vulkan dependencies to SDK 1.4.304.1 2025-05-31 16:37:04 +01:00
PabloMK7
a974fc4ac8 kernel: Improve SVC handling timings 2025-05-31 15:23:14 +00:00
PabloMK7
ad97506867
video_core: Remove assert in AccelerateTextureCopy (#1092) 2025-05-31 14:25:57 +02:00
PabloMK7
cf87efa3c0 video_core: Vectorize RasterizerAccelerated::AnalyzeVertexArray
Uses SIMD operations on the RasterizerAccelerated::AnalyzeVertexArray
function, which is hot code. Slightly reduces GPU processing time
on all games.

This idea was suggested by an anonymous contributor.

Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
2025-05-31 11:12:28 +00:00
PabloMK7
88b3dff278 citra_common: Enable SSE4.2 on x86_64 builds
Enables the use of SSE4.2 instructions on x86_64 CPUs, allowing
compilers to automatically vectorize some loops on citra_common.
A CMake toggle ENABLE_SSE42 (ON by default) has been added
to enable this behaviour.

This change breaks compatibility with CPUs that do not have
SSE4.2 instructions. All modern CPUs (from 2011 onwards) should
always have these instructions. Manual compilation will be
needed for older CPUs.

A message has been added to report if the CPU is incompatible
when starting the emulator.

Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
2025-05-31 11:12:28 +00:00
OpenSauce
9ecd26d2ce
android: Enhance shortcut customization with a custom dialog (#824)
* android: Enhance shortcut customization with a custom dialog

Adds ability to customize game shortcuts with:
- Custom name input
- Editable icon via image picker
- Ability to stretch to fit or zoom to fit the shortcut icon

* Code cleanup

* SearchFragment.kt: Updated license header

---------

Co-authored-by: Kleidis <167202775+kleidis@users.noreply.github.com>
2025-05-29 19:17:01 +01:00
PabloMK7
4cfb5c9d55
android: Add missing shader JIT option (#1085) 2025-05-29 19:10:26 +02:00
OpenSauce04
a6c72531b4 strings.xml: Removed stray quotation mark from advanced string 2025-05-29 17:15:52 +01:00
PabloMK7
ae43740690
Fix disable spirv optimizer option not saving (#1084) 2025-05-29 18:11:33 +02:00
PabloMK7
ec964c8610
Add more advanced frame time information (#1083) 2025-05-29 17:38:10 +02:00
PabloMK7
fd2ce82b6e
Add toggle to disable SPIRV optimization pass (#1080)
* Add toggle to disable SPIRV optimization pass

* vk_shader_util.cpp: Nitpicky comment tweak

* Consistently refer to "optimizer" instead of "optimization"

---------

Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
2025-05-28 21:22:59 +01:00
OpenSauce
fd2551439e
android: Add rotate screen upright toggle to UI (#819)
* Add upright boolean for portrait mode

* Add the `upright_screen` boolean to the UI as a switch & in-game

* ScreenAdjustmentUtil.kt: Updated license header

---------

Co-authored-by: Kleidis <167202775+kleidis@users.noreply.github.com>
2025-05-28 18:50:57 +00:00
OpenSauce
f3c63abd30
android: Only use Boolean value type for SwitchSettings (#821)
* android: Only use `Boolean` value type for `SwitchSetting`s

* SwitchSetting.kt: Updated license header
2025-05-28 19:00:48 +01:00
OpenSauce
f771952e62
android: Reorganize setup process to use multiple buttons per-page (#820)
* Refactor SetupFragment to support multiple buttons in one page

* Add new `PageButton` data class

* Programmatic button creation && button disabling in setUpAdapter

* Refactor SetupWarningDialogFragment to support multiple titles, descriptions, and help links

* Rework CitraDirectoryHelper to support button step state

* Update warning message for user folder selection step

* Updated license headers

* Code cleanup

* "skip setting the user folder" --> "skip setting up the user folder"

* Fixed typos in string names

* Break `select_emulator_data_folder_description` string over two lines

* `select_emulator_data_folder` --> `select_emulator_data_folders`

* Code cleanup #2

* Removed seemingly accidentally duplicated block of code

* Removed stray newlines

---------

Co-authored-by: Kleidis <167202775+kleidis@users.noreply.github.com>
2025-05-27 18:41:27 +01:00
OpenSauce04
6df92285e1 update_checker.cpp: Use fmt::format instead of std::format
It seems that certain environments still don't have access to `std::format` yet, and I missed this because it built fine on my machine and CI passed because the code using `std::format` wasn't included in non-tagged builds.
2025-05-27 14:00:08 +01:00
OpenSauce04
2c8a3b17b4 Updated language translations via Transifex 2025-05-27 13:03:07 +01:00
OpenSauce04
0ca46dc05f update_checker.cpp: Use GitHub's tags API to get latest tag for prereleases
The `releases` API can sometimes return releases out of order if they were uploaded too close to eachother, for whatever reason.
2025-05-27 13:00:32 +01:00
OpenSauce04
95eb701e12 update_checker.cpp: Add alpha and beta substrings to prerelease detection logic 2025-05-27 11:39:00 +01:00
OpenSauce04
2aa29a62cc android: Enable android:windowOptOutEdgeToEdgeEnforcement for Android 15+ 2025-05-26 21:28:09 +01:00
RedBlackAka
f20e5be513 Update MoltenVK to 1.2.9 2025-05-26 19:33:27 +01:00
PabloMK7
5e2161d90b
video_core: Refactor state tracking (#1059) 2025-05-26 14:37:03 +02:00
PabloMK7
bf587885cb
Allow SPIR-V when using Shadow2D texture mapping (#1057) 2025-05-24 00:05:16 +02:00
PabloMK7
ee63706887
Fix incorrect geo shader config start index parameter bit length (#1056) 2025-05-22 18:20:13 +02:00
PabloMK7
e83b81ec98
Add setting to toggle RPC server (disabled by default) (#1047) 2025-05-18 17:27:37 +02:00
OpenSauce04
8b939a9dab video_core: Fixed incorrect Vulkan mode when speed unthrottled w/ vsync
When the frame limit was set to 0 (unthrottled), the Vulkan present mode would be unintentionally set to FIFO, which caps out at the monitor's refresh rate
2025-05-16 17:48:30 +01:00
OpenSauce04
d878bfec3b file_util.cpp: Removed unnecessary definitions 2025-05-16 17:11:21 +01:00
OpenSauce04
33889fec1d file_util.cpp: Use _stat64 instead of stat where appropriate
Avoids compile failures introduced in an MSYS2 update
2025-05-16 17:11:21 +01:00
OpenSauce04
51dc3c6858 citra_room: Added removed option warning for --enable-citra-mods/-e 2025-05-15 16:19:20 +01:00
OpenSauce04
4ea9d76093 Updated license headers 2025-05-15 16:19:20 +01:00
Kleidis
d94654ea10 network: Removed enable_citra_mods room option
Moderator status is now determined
solely by the user's moderator flag
2025-05-15 16:19:20 +01:00
Kleidis
650cf43cd8 qt: Update moderation UI visibility in chat room 2025-05-15 16:19:20 +01:00
Kleidis
54732c560c network: Grant private room hosts moderator privileges 2025-05-15 16:19:20 +01:00
Briar
580d46e3d6
android: Add aspect ratio setting for single screen layout mode (#913)
* android: Add aspect ratio setting for single screen layout mode

Co-Authored-By: Morph <39850852+Morph1984@users.noreply.github.com>

* Partial rewrite to address issues and improve readability

---------

Co-authored-by: Morph <39850852+Morph1984@users.noreply.github.com>
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
2025-05-12 19:58:01 +01:00
OpenSauce04
c204ebf021 android: Fixed Turbo toast appearing in situations other than toggling Turbo
+ minor code cleanup
2025-05-09 20:34:55 +01:00
Kex
ea8e403f83 Make argument of --username required 2025-05-09 11:52:17 +01:00
OpenSauce04
73760e087a android: Added periods to the ends of performance overlay setting descriptions 2025-05-08 21:44:07 +01:00
OpenSauce04
3ce9f277d9 android: Corrected some nitpicky formatting inconsistencies in drawable xmls 2025-05-08 19:29:20 +01:00
OpenSauce
378d830a93
android: Improve performance stats overlay settings and functionality (#808)
* android: Improve performance stats overlay settings and functionality

* Add battery temp functions

* Readd frametime

* Corrected `perf_overlay_position` being placed in the wrong `default_ini.h` file

* Fixed the word "overlay" being repeatedly misspelled in function names

* `updateshowStatsOverlay` --> `updateShowStatsOverlay`

* Increased frequency of performance overlay updates

Changed from every 3 seconds to every 1 second

* Adjusted overlay margins to avoid text being lost behind rounded corner cutouts

* Fix performance overlay updates being stacked when changing orientation

* Changed out host RAM usage statistic for available host RAM

* Removed seemingly unused code

* "FT" --> "Frametime" in overlay

* Use non-breaking spaces to control how the overlay text breaks

Also used a vertical box drawing character instead of a pipe for the divider because it looks slightly nicer

* Renamed/adjusted remnants of the "Show System Memory Usage" setting

* Replaced Performance Stats Overlay icon with a stock clip art image from Android Studio

* Made performance overlay setting value names and strings less generic

* Rebranded Performance Stats Overlay as simply "Performance Overlay"

* Rewrote performance overlay settings description

* Improved naming consistency

* Rebranded "Show Overlay" toggle to "Show Controller Overlay"

This is to avoid confusion with the new performance overlay

* nitpick: Fixed order of imports in EmulationFragment.kt

* More string name consistency improvements

* Fixed compile failure due to a binding name not being updated

* Changed Performance Overlay setting headers

* EmulationFragment.kt: Formatting corrections

* Removed seemingly misplaced call to `updateShowPerformanceOverlay`

* `OVERLAY_POSITION` --> `PERFORMANCE_OVERLAY_POSITION`

---------

Co-authored-by: Kleidis <167202775+kleidis@users.noreply.github.com>
Co-authored-by: Zephyron <zephyron@citron-emu.orgq>
2025-05-08 19:26:30 +01:00
OpenSauce
16980b0ffc
readme: Updated minimum MacOS version to reflect a recent change 2025-05-07 23:29:02 +01:00
OpenSauce
5297c95e52
readme: Added a missing divider between Windows and MacOS install instructions 2025-05-07 23:27:34 +01:00
OpenSauce
519f67a20a
Updated readme 2025-05-07 23:26:26 +01:00
OpenSauce04
74f3a2457e Updated translations via Transifex 2025-05-07 21:21:49 +01:00
PabloMK7
18447ac6ac Fix savestates with the OpenGL renderer 2025-05-07 21:05:34 +01:00
Briar
e946e38cd5 renderer_vulkan: Actually initialize background colors on start 2025-05-07 14:41:19 +01:00
OpenSauce04
beacac3f11 Corrected some minor visual inconsistencies compared to other tabs 2025-05-06 22:18:17 +01:00
SeppNel
89974af0ef Add scroll to layout page (graphics) 2025-05-06 22:18:17 +01:00
OpenSauce04
32d5036fc6 gitignore: Added .markdown-preview.html
Produced by the `markdown-preview-mode` Emacs package
2025-05-06 19:33:46 +01:00
OpenSauce04
86b3c732e5 tools: Added additional note about translation inconsistencies in certain dev environments 2025-05-06 19:31:18 +01:00
OpenSauce04
2ce26ee9ea Updated translations via Transifex 2025-05-06 19:23:34 +01:00
186 changed files with 12027 additions and 9886 deletions

View file

@ -158,7 +158,7 @@ jobs:
- name: Install vulkan-sdk (MSVC)
if: ${{ matrix.target == 'msvc' }}
run: |
wget https://sdk.lunarg.com/sdk/download/1.3.296.0/windows/VulkanSDK-1.3.296.0-Installer.exe -O D:/a/_temp/vulkan.exe
wget https://sdk.lunarg.com/sdk/download/1.4.304.1/windows/VulkanSDK-1.4.304.1-Installer.exe -O D:/a/_temp/vulkan.exe
D:/a/_temp/vulkan.exe --accept-licenses --default-answer --confirm-command install
- name: Set up MSYS2
if: ${{ matrix.target == 'msys2' }}
@ -232,6 +232,9 @@ jobs:
run: |
sudo apt-get update -y
sudo apt-get install ccache apksigner -y
- name: Update Android SDK CMake version
run: |
echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "cmake;3.30.3"
- name: Build
run: JAVA_HOME=$JAVA_HOME_17_X64 ./.ci/android.sh
env:

1
.gitignore vendored
View file

@ -13,6 +13,7 @@ src/common/scm_rev.cpp
# Project/editor files
*.swp
*.kdev4
.markdown-preview.html
.idea/
.vs/
.vscode/

View file

@ -1,5 +1,6 @@
# CMake 3.12 required for 20 to be a valid value for CXX_STANDARD
cmake_minimum_required(VERSION 3.15)
# CMake >=3.12 required for 20 to be a valid value for CXX_STANDARD,
# and >=3.25 required to make LTO work on Android.
cmake_minimum_required(VERSION 3.25)
# Don't override the warning flags in MSVC:
cmake_policy(SET CMP0092 NEW)
@ -105,6 +106,8 @@ option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF)
option(ENABLE_MICROPROFILE "Enables microprofile capabilities" OFF)
option(ENABLE_SSE42 "Enable SSE4.2 optimizations on x86_64" ON)
# Compile options
CMAKE_DEPENDENT_OPTION(COMPILE_WITH_DWARF "Add DWARF debugging information" ${IS_DEBUG_BUILD} "MINGW" OFF)
option(ENABLE_LTO "Enable link time optimization" ${DEFAULT_ENABLE_LTO})
@ -126,6 +129,15 @@ if (ENABLE_SDL2_FRONTEND)
add_definitions(-DENABLE_SDL2_FRONTEND)
endif()
if(ENABLE_SSE42 AND (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64"))
message(STATUS "SSE4.2 enabled for x86_64")
if(MSVC)
SET(SSE42_COMPILE_OPTION /arch:SSE4.2)
else()
SET(SSE42_COMPILE_OPTION -msse4.1 -msse4.2)
endif()
endif()
include(CitraHandleSystemLibs)
if (CITRA_USE_PRECOMPILED_HEADERS)

View file

@ -171,16 +171,16 @@ endfunction()
function(download_moltenvk)
if (IOS)
set(MOLTENVK_PLATFORM "iOS")
set(MOLTENVK_PLATFORM "static/MoltenVK.xcframework/ios-arm64")
else()
set(MOLTENVK_PLATFORM "macOS")
set(MOLTENVK_PLATFORM "dynamic/dylib/macOS")
endif()
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
if (NOT EXISTS ${MOLTENVK_DIR})
if (NOT EXISTS ${MOLTENVK_TAR})
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.7-rc2/MoltenVK-all.tar
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-all.tar
${MOLTENVK_TAR} SHOW_PROGRESS)
endif()
@ -189,7 +189,7 @@ function(download_moltenvk)
endif()
# Add the MoltenVK library path to the prefix so find_library can locate it.
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${MOLTENVK_PLATFORM}")
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/${MOLTENVK_PLATFORM}")
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
endfunction()

View file

@ -18,6 +18,8 @@ Download the latest release from [Releases](https://github.com/azahar-emu/azahar
If you are unsure of whether you want to use MSYS2 or MSVC, use MSYS2.
---
### MacOS
Download the latest release from [Releases](https://github.com/azahar-emu/azahar/releases).
@ -26,7 +28,9 @@ The `macos-universal` download will work on both Intel and Apple Silicon Macs.
---
### Android
The recommended method of downloading Azahar on Android is via the [Google Play store](https://play.google.com/store/apps/details?id=io.github.lime3ds.android).
The recommended method of downloading Azahar on Android is via the Google Play store:
<a href='https://play.google.com/store/apps/details?id=io.github.lime3ds.android'><img width='180' alt='Get it on Google Play' src='https://raw.githubusercontent.com/pioug/google-play-badges/06ccd9252af1501613da2ca28eaffe31307a4e6d/svg/English.svg'/></a>
Alternatively, you can install the app using Obtainium:
1. Download and install Obtainium from [here](https://github.com/ImranR98/Obtainium/releases) (use the file named `app-release.apk`)
@ -42,14 +46,12 @@ Keep in mind that you will not recieve automatic updates when installing via the
---
### Linux
Azahar is available as an AppImage on the [Releases](https://github.com/azahar-emu/azahar/releases) page.
The recommended format for using Azahar on Linux is the Flatpak available on Flathub:
A Flatpak distribution is currently being worked on.
<!--
We are also on Flathub:
<a href='https://flathub.org/apps/org.azahar_emu.Azahar'><img width='180' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/></a>
Azahar is also available as an AppImage on the [Releases](https://github.com/azahar-emu/azahar/releases) page.
<a href=https://flathub.org/apps/org.azahar-emu.azahar><img width='180' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/></a>
-->
# Build instructions
@ -85,7 +87,7 @@ Below are the minimum requirements to run Azahar:
### Desktop
```
Operating System: Windows 10 (64-bit), MacOS 13 (Ventura), or modern 64-bit Linux
Operating System: Windows 10 (64-bit), MacOS 13.4 (Ventura), or modern 64-bit Linux
CPU: x86-64/ARM64 CPU (Windows for ARM not supported). Single core performance higher than 1,800 on Passmark
GPU: OpenGL 4.3 or Vulkan 1.1 support
Memory: 2GB of RAM. 4GB is recommended

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

615
dist/languages/de.ts vendored

File diff suppressed because it is too large Load diff

557
dist/languages/el.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

557
dist/languages/fi.ts vendored

File diff suppressed because it is too large Load diff

609
dist/languages/fr.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

557
dist/languages/id.ts vendored

File diff suppressed because it is too large Load diff

633
dist/languages/it.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

557
dist/languages/nb.ts vendored

File diff suppressed because it is too large Load diff

557
dist/languages/nl.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

565
dist/languages/sv.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

2
externals/libyuv vendored

@ -1 +1 @@
Subproject commit c060118bea3f28ceb837d3c85e479d3bb4c21726
Subproject commit 6f729fbe658a40dfd993fa8b22bd612bb17cde5c

View file

@ -136,6 +136,9 @@ else()
# which is a problem for older versions (e.g. GCC 11).
add_compile_options("-Wno-attributes")
add_compile_options("-Wno-interference-size")
# Suppress irrelevant ABI warnings generated by GCC
add_compile_options("-Wno-psabi")
add_link_options("-Wno-psabi")
endif()
if (MINGW)

View file

@ -1,4 +1,4 @@
// Copyright Citra Emulator Project / Lime3DS Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -22,7 +22,7 @@ plugins {
val autoVersion = (((System.currentTimeMillis() / 1000) - 1451606400) / 10).toInt()
val abiFilter = listOf("arm64-v8a", "x86_64")
val downloadedJniLibsPath = "${buildDir}/downloadedJniLibs"
val downloadedJniLibsPath = "${layout.buildDirectory.get().asFile.path}/downloadedJniLibs"
@Suppress("UnstableApiUsage")
android {
@ -51,6 +51,7 @@ android {
buildFeatures {
viewBinding = true
buildConfig = true
}
lint {
@ -124,7 +125,6 @@ android {
applicationIdSuffix = ".debug"
versionNameSuffix = "-debug"
signingConfig = signingConfigs.getByName("debug")
isMinifyEnabled = true
isShrinkResources = true
isDebuggable = true
isJniDebuggable = true
@ -150,7 +150,7 @@ android {
externalNativeBuild {
cmake {
version = "3.22.1"
version = "3.25.0+"
path = file("../../../CMakeLists.txt")
}
}
@ -186,8 +186,8 @@ dependencies {
// Download Vulkan Validation Layers from the KhronosGroup GitHub.
val downloadVulkanValidationLayers = tasks.register<Download>("downloadVulkanValidationLayers") {
src("https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download/sdk-1.3.261.1/android-binaries-sdk-1.3.261.1-android.zip")
dest(file("${buildDir}/tmp/Vulkan-ValidationLayers.zip"))
src("https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download/vulkan-sdk-1.4.304.1/android-binaries-1.4.304.1.zip")
dest(file("${layout.buildDirectory.get().asFile.path}/tmp/Vulkan-ValidationLayers.zip"))
onlyIfModified(true)
}

View file

@ -238,20 +238,26 @@ class EmulationActivity : AppCompatActivity() {
preferences.getInt(InputBindingSetting.getInputButtonKey(event.keyCode), event.keyCode)
val action: Int = when (event.action) {
KeyEvent.ACTION_DOWN -> {
hotkeyUtility.handleHotkey(button)
// On some devices, the back gesture / button press is not intercepted by androidx
// and fails to open the emulation menu. So we're stuck running deprecated code to
// cover for either a fault on androidx's side or in OEM skins (MIUI at least)
if (event.keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed()
// If the hotkey is pressed, we don't want to open the drawer
if (!hotkeyUtility.HotkeyIsPressed) {
onBackPressed()
}
}
hotkeyUtility.handleHotkey(button)
// Normal key events.
NativeLibrary.ButtonState.PRESSED
}
KeyEvent.ACTION_UP -> NativeLibrary.ButtonState.RELEASED
KeyEvent.ACTION_UP -> {
hotkeyUtility.HotkeyIsPressed = false
NativeLibrary.ButtonState.RELEASED
}
else -> return false
}
val input = event.device

View file

@ -20,7 +20,12 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.Bitmap
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.BitmapFactory
import androidx.activity.result.ActivityResultLauncher
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.edit
import androidx.core.graphics.scale
import androidx.core.net.toUri
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController
@ -43,19 +48,29 @@ import org.citra.citra_emu.CitraApplication
import org.citra.citra_emu.R
import org.citra.citra_emu.adapters.GameAdapter.GameViewHolder
import org.citra.citra_emu.databinding.CardGameBinding
import org.citra.citra_emu.databinding.DialogShortcutBinding
import org.citra.citra_emu.features.cheats.ui.CheatsFragmentDirections
import org.citra.citra_emu.features.settings.ui.SettingsActivity
import org.citra.citra_emu.features.settings.utils.SettingsFile
import org.citra.citra_emu.fragments.IndeterminateProgressDialogFragment
import org.citra.citra_emu.model.Game
import org.citra.citra_emu.utils.FileUtil
import org.citra.citra_emu.utils.GameIconUtils
import org.citra.citra_emu.viewmodel.GamesViewModel
class GameAdapter(private val activity: AppCompatActivity, private val inflater: LayoutInflater) :
class GameAdapter(private val activity: AppCompatActivity, private val inflater: LayoutInflater, private val openImageLauncher: ActivityResultLauncher<String>?) :
ListAdapter<Game, GameViewHolder>(AsyncDifferConfig.Builder(DiffCallback()).build()),
View.OnClickListener, View.OnLongClickListener {
private var lastClickTime = 0L
private var imagePath: String? = null
private var dialogShortcutBinding: DialogShortcutBinding? = null
fun handleShortcutImageResult(uri: Uri?) {
val path = uri?.toString()
if (path != null) {
imagePath = path
dialogShortcutBinding!!.imageScaleSwitch.isEnabled = imagePath != null
refreshShortcutDialogIcon()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder {
// Create a new view.
@ -337,21 +352,67 @@ class GameAdapter(private val activity: AppCompatActivity, private val inflater:
}
bottomSheetView.findViewById<MaterialButton>(R.id.game_shortcut).setOnClickListener {
val shortcutManager = activity.getSystemService(ShortcutManager::class.java)
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
CoroutineScope(Dispatchers.IO).launch {
val bitmap = (bottomSheetView.findViewById<ImageView>(R.id.game_icon).drawable as BitmapDrawable).bitmap
val icon = Icon.createWithBitmap(bitmap)
val shortcut = ShortcutInfo.Builder(context, game.title)
.setShortLabel(game.title)
.setIcon(icon)
.setIntent(game.launchIntent.apply {
putExtra("launched_from_shortcut", true)
})
.build()
shortcutManager.requestPinShortcut(shortcut, null)
// Default to false for zoomed in shortcut icons
preferences.edit() {
putBoolean(
"shouldStretchIcon",
false
)
}
dialogShortcutBinding = DialogShortcutBinding.inflate(activity.layoutInflater)
dialogShortcutBinding!!.shortcutNameInput.setText(game.title)
GameIconUtils.loadGameIcon(activity, game, dialogShortcutBinding!!.shortcutIcon)
dialogShortcutBinding!!.shortcutIcon.setOnClickListener {
openImageLauncher?.launch("image/*")
}
dialogShortcutBinding!!.imageScaleSwitch.setOnCheckedChangeListener { _, isChecked ->
preferences.edit {
putBoolean(
"shouldStretchIcon",
isChecked
)
}
refreshShortcutDialogIcon()
}
MaterialAlertDialogBuilder(context)
.setTitle(R.string.create_shortcut)
.setView(dialogShortcutBinding!!.root)
.setPositiveButton(android.R.string.ok) { _, _ ->
val shortcutName = dialogShortcutBinding!!.shortcutNameInput.text.toString()
if (shortcutName.isEmpty()) {
Toast.makeText(context, R.string.shortcut_name_empty, Toast.LENGTH_LONG).show()
return@setPositiveButton
}
val iconBitmap = (dialogShortcutBinding!!.shortcutIcon.drawable as BitmapDrawable).bitmap
val shortcutManager = activity.getSystemService(ShortcutManager::class.java)
CoroutineScope(Dispatchers.IO).launch {
val icon = Icon.createWithBitmap(iconBitmap)
val shortcut = ShortcutInfo.Builder(context, shortcutName)
.setShortLabel(shortcutName)
.setIcon(icon)
.setIntent(game.launchIntent.apply {
putExtra("launchedFromShortcut", true)
})
.build()
shortcutManager?.requestPinShortcut(shortcut, null)
imagePath = null
}
}
.setNegativeButton(android.R.string.cancel) { _, _ ->
imagePath = null
}
.show()
bottomSheetDialog.dismiss()
}
bottomSheetView.findViewById<MaterialButton>(R.id.cheats).setOnClickListener {
@ -375,6 +436,47 @@ class GameAdapter(private val activity: AppCompatActivity, private val inflater:
bottomSheetDialog.show()
}
private fun refreshShortcutDialogIcon() {
if (imagePath != null) {
val originalBitmap = BitmapFactory.decodeStream(
CitraApplication.appContext.contentResolver.openInputStream(
imagePath!!.toUri()
)
)
val scaledBitmap = {
val preferences =
PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext)
if (preferences.getBoolean("shouldStretchIcon", true)) {
// stretch to fit
originalBitmap.scale(108, 108)
} else {
// Zoom in to fit the bitmap while keeping the aspect ratio
val width = originalBitmap.width
val height = originalBitmap.height
val targetSize = 108
if (width > height) {
// Landscape orientation
val scaleFactor = targetSize.toFloat() / height
val scaledWidth = (width * scaleFactor).toInt()
val scaledBmp = originalBitmap.scale(scaledWidth, targetSize)
val startX = (scaledWidth - targetSize) / 2
Bitmap.createBitmap(scaledBmp, startX, 0, targetSize, targetSize)
} else {
val scaleFactor = targetSize.toFloat() / width
val scaledHeight = (height * scaleFactor).toInt()
val scaledBmp = originalBitmap.scale(targetSize, scaledHeight)
val startY = (scaledHeight - targetSize) / 2
Bitmap.createBitmap(scaledBmp, 0, startY, targetSize, targetSize)
}
}
}()
dialogShortcutBinding!!.shortcutIcon.setImageBitmap(scaledBitmap)
}
}
private fun isValidGame(extension: String): Boolean {
return Game.badExtensions.stream()
.noneMatch { extension == it.lowercase() }

View file

@ -1,9 +1,10 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
package org.citra.citra_emu.adapters
import android.content.res.ColorStateList
import android.text.Html
import android.text.method.LinkMovementMethod
import android.view.LayoutInflater
@ -14,9 +15,11 @@ import androidx.core.content.res.ResourcesCompat
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.button.MaterialButton
import org.citra.citra_emu.databinding.PageSetupBinding
import org.citra.citra_emu.model.ButtonState
import org.citra.citra_emu.model.PageState
import org.citra.citra_emu.model.SetupCallback
import org.citra.citra_emu.model.SetupPage
import org.citra.citra_emu.model.StepState
import org.citra.citra_emu.R
import org.citra.citra_emu.utils.ViewUtils
class SetupAdapter(val activity: AppCompatActivity, val pages: List<SetupPage>) :
@ -42,8 +45,40 @@ class SetupAdapter(val activity: AppCompatActivity, val pages: List<SetupPage>)
fun bind(page: SetupPage) {
this.page = page
if (page.stepCompleted.invoke() == StepState.STEP_COMPLETE) {
onStepCompleted()
if (page.pageSteps.invoke() == PageState.PAGE_STEPS_COMPLETE) {
onStepCompleted(0, pageFullyCompleted = true)
}
if (page.pageButtons != null && page.pageSteps.invoke() != PageState.PAGE_STEPS_COMPLETE) {
for (pageButton in page.pageButtons) {
val pageButtonView = LayoutInflater.from(activity)
.inflate(
R.layout.page_button,
binding.pageButtonContainer,
false
) as MaterialButton
pageButtonView.apply {
id = pageButton.titleId
icon = ResourcesCompat.getDrawable(
activity.resources,
pageButton.iconId,
activity.theme
)
text = activity.resources.getString(pageButton.titleId)
}
pageButtonView.setOnClickListener {
pageButton.buttonAction.invoke(this@SetupPageViewHolder)
}
binding.pageButtonContainer.addView(pageButtonView)
// Disable buton add if its already completed
if (pageButton.buttonState.invoke() == ButtonState.BUTTON_ACTION_COMPLETE) {
onStepCompleted(pageButton.titleId, pageFullyCompleted = false)
}
}
}
binding.icon.setImageDrawable(
@ -57,31 +92,26 @@ class SetupAdapter(val activity: AppCompatActivity, val pages: List<SetupPage>)
binding.textDescription.text =
Html.fromHtml(activity.resources.getString(page.descriptionId), 0)
binding.textDescription.movementMethod = LinkMovementMethod.getInstance()
binding.buttonAction.apply {
text = activity.resources.getString(page.buttonTextId)
if (page.buttonIconId != 0) {
icon = ResourcesCompat.getDrawable(
activity.resources,
page.buttonIconId,
activity.theme
)
}
iconGravity =
if (page.leftAlignedIcon) {
MaterialButton.ICON_GRAVITY_START
} else {
MaterialButton.ICON_GRAVITY_END
}
setOnClickListener {
page.buttonAction.invoke(this@SetupPageViewHolder)
}
}
}
override fun onStepCompleted() {
ViewUtils.hideView(binding.buttonAction, 200)
ViewUtils.showView(binding.textConfirmation, 200)
override fun onStepCompleted(pageButtonId: Int, pageFullyCompleted: Boolean) {
val button = binding.pageButtonContainer.findViewById<MaterialButton>(pageButtonId)
if (pageFullyCompleted) {
ViewUtils.hideView(binding.pageButtonContainer, 200)
ViewUtils.showView(binding.textConfirmation, 200)
}
if (button != null) {
button.isEnabled = false
button.animate()
.alpha(0.38f)
.setDuration(200)
.start()
button.setTextColor(button.context.getColor(com.google.android.material.R.color.material_on_surface_disabled))
button.iconTint =
ColorStateList.valueOf(button.context.getColor(com.google.android.material.R.color.material_on_surface_disabled))
}
}
}
}

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -68,4 +68,13 @@ class ScreenAdjustmentUtil(
settings.saveSetting(IntSetting.ORIENTATION_OPTION, SettingsFile.FILE_NAME_CONFIG)
activity.requestedOrientation = orientationOption
}
fun toggleScreenUpright() {
val uprightBoolean = BooleanSetting.UPRIGHT_SCREEN.boolean
BooleanSetting.UPRIGHT_SCREEN.boolean = !uprightBoolean
settings.saveSetting(BooleanSetting.UPRIGHT_SCREEN, SettingsFile.FILE_NAME_CONFIG)
NativeLibrary.reloadSettings()
NativeLibrary.updateFramebuffer(NativeLibrary.isPortraitMode)
}
}

View file

@ -17,6 +17,7 @@ class HotkeyUtility(
private val context: Context) {
private val hotkeyButtons = Hotkey.entries.map { it.button }
var HotkeyIsPressed = false
fun handleHotkey(bindedButton: Int): Boolean {
if(hotkeyButtons.contains(bindedButton)) {
@ -25,7 +26,7 @@ class HotkeyUtility(
Hotkey.CYCLE_LAYOUT.button -> screenAdjustmentUtil.cycleLayouts()
Hotkey.CLOSE_GAME.button -> EmulationLifecycleUtil.closeGame()
Hotkey.PAUSE_OR_RESUME.button -> EmulationLifecycleUtil.pauseOrResume()
Hotkey.TURBO_LIMIT.button -> TurboHelper.setTurboEnabled(!TurboHelper.isTurboSpeedEnabled())
Hotkey.TURBO_LIMIT.button -> TurboHelper.toggleTurbo(true)
Hotkey.QUICKSAVE.button -> {
NativeLibrary.saveState(NativeLibrary.QUICKSAVE_SLOT)
Toast.makeText(context,
@ -45,6 +46,7 @@ class HotkeyUtility(
}
else -> {}
}
HotkeyIsPressed = true
return true
}
return false

View file

@ -12,14 +12,43 @@ enum class BooleanSetting(
EXPAND_TO_CUTOUT_AREA("expand_to_cutout_area", Settings.SECTION_LAYOUT, false),
SPIRV_SHADER_GEN("spirv_shader_gen", Settings.SECTION_RENDERER, true),
ASYNC_SHADERS("async_shader_compilation", Settings.SECTION_RENDERER, false),
DISABLE_SPIRV_OPTIMIZER("disable_spirv_optimizer", Settings.SECTION_RENDERER, true),
PLUGIN_LOADER("plugin_loader", Settings.SECTION_SYSTEM, false),
ALLOW_PLUGIN_LOADER("allow_plugin_loader", Settings.SECTION_SYSTEM, true),
SWAP_SCREEN("swap_screen", Settings.SECTION_LAYOUT, false),
INSTANT_DEBUG_LOG("instant_debug_log", Settings.SECTION_DEBUG, false),
ENABLE_RPC_SERVER("enable_rpc_server", Settings.SECTION_DEBUG, false),
CUSTOM_LAYOUT("custom_layout",Settings.SECTION_LAYOUT,false),
OVERLAY_SHOW_FPS("overlay_show_fps", Settings.SECTION_LAYOUT, true),
OVERLAY_SHOW_FRAMETIME("overlay_show_frame_time", Settings.SECTION_LAYOUT, false),
OVERLAY_SHOW_SPEED("overlay_show_speed", Settings.SECTION_LAYOUT, false),
OVERLAY_SHOW_APP_RAM_USAGE("overlay_show_app_ram_usage", Settings.SECTION_LAYOUT, false),
OVERLAY_SHOW_AVAILABLE_RAM("overlay_show_available_ram", Settings.SECTION_LAYOUT, false),
OVERLAY_SHOW_BATTERY_TEMP("overlay_show_battery_temp", Settings.SECTION_LAYOUT, false),
OVERLAY_BACKGROUND("overlay_background", Settings.SECTION_LAYOUT, false),
DELAY_START_LLE_MODULES("delay_start_for_lle_modules", Settings.SECTION_DEBUG, true),
DETERMINISTIC_ASYNC_OPERATIONS("deterministic_async_operations", Settings.SECTION_DEBUG, false),
REQUIRED_ONLINE_LLE_MODULES("enable_required_online_lle_modules", Settings.SECTION_SYSTEM, false);
REQUIRED_ONLINE_LLE_MODULES("enable_required_online_lle_modules", Settings.SECTION_SYSTEM, false),
LLE_APPLETS("lle_applets", Settings.SECTION_SYSTEM, false),
NEW_3DS("is_new_3ds", Settings.SECTION_SYSTEM, true),
LINEAR_FILTERING("filter_mode", Settings.SECTION_RENDERER, true),
SHADERS_ACCURATE_MUL("shaders_accurate_mul", Settings.SECTION_RENDERER, false),
DISK_SHADER_CACHE("use_disk_shader_cache", Settings.SECTION_RENDERER, true),
DUMP_TEXTURES("dump_textures", Settings.SECTION_UTILITY, false),
CUSTOM_TEXTURES("custom_textures", Settings.SECTION_UTILITY, false),
ASYNC_CUSTOM_LOADING("async_custom_loading", Settings.SECTION_UTILITY, true),
PRELOAD_TEXTURES("preload_textures", Settings.SECTION_UTILITY, false),
ENABLE_AUDIO_STRETCHING("enable_audio_stretching", Settings.SECTION_AUDIO, true),
ENABLE_REALTIME_AUDIO("enable_realtime_audio", Settings.SECTION_AUDIO, false),
CPU_JIT("use_cpu_jit", Settings.SECTION_CORE, true),
HW_SHADER("use_hw_shader", Settings.SECTION_RENDERER, true),
SHADER_JIT("use_shader_jit", Settings.SECTION_RENDERER, true),
VSYNC("use_vsync_new", Settings.SECTION_RENDERER, true),
USE_FRAME_LIMIT("use_frame_limit", Settings.SECTION_RENDERER, true),
DEBUG_RENDERER("renderer_debug", Settings.SECTION_DEBUG, false),
DISABLE_RIGHT_EYE_RENDER("disable_right_eye_render", Settings.SECTION_RENDERER, false),
USE_ARTIC_BASE_CONTROLLER("use_artic_base_controller", Settings.SECTION_CONTROLS, false),
UPRIGHT_SCREEN("upright_screen", Settings.SECTION_LAYOUT, false);
override var boolean: Boolean = defaultValue
@ -44,6 +73,14 @@ enum class BooleanSetting(
DELAY_START_LLE_MODULES,
DETERMINISTIC_ASYNC_OPERATIONS,
REQUIRED_ONLINE_LLE_MODULES,
NEW_3DS,
LLE_APPLETS,
VSYNC,
DEBUG_RENDERER,
CPU_JIT,
ASYNC_CUSTOM_LOADING,
SHADERS_ACCURATE_MUL,
USE_ARTIC_BASE_CONTROLLER
)
fun from(key: String): BooleanSetting? =

View file

@ -44,30 +44,15 @@ enum class IntSetting(
PORTRAIT_BOTTOM_WIDTH("custom_portrait_bottom_width",Settings.SECTION_LAYOUT,640),
PORTRAIT_BOTTOM_HEIGHT("custom_portrait_bottom_height",Settings.SECTION_LAYOUT,480),
AUDIO_INPUT_TYPE("input_type", Settings.SECTION_AUDIO, 0),
NEW_3DS("is_new_3ds", Settings.SECTION_SYSTEM, 1),
LLE_APPLETS("lle_applets", Settings.SECTION_SYSTEM, 1),
CPU_CLOCK_SPEED("cpu_clock_percentage", Settings.SECTION_CORE, 100),
LINEAR_FILTERING("filter_mode", Settings.SECTION_RENDERER, 1),
SHADERS_ACCURATE_MUL("shaders_accurate_mul", Settings.SECTION_RENDERER, 0),
DISK_SHADER_CACHE("use_disk_shader_cache", Settings.SECTION_RENDERER, 1),
DUMP_TEXTURES("dump_textures", Settings.SECTION_UTILITY, 0),
CUSTOM_TEXTURES("custom_textures", Settings.SECTION_UTILITY, 0),
ASYNC_CUSTOM_LOADING("async_custom_loading", Settings.SECTION_UTILITY, 1),
PRELOAD_TEXTURES("preload_textures", Settings.SECTION_UTILITY, 0),
ENABLE_AUDIO_STRETCHING("enable_audio_stretching", Settings.SECTION_AUDIO, 1),
ENABLE_REALTIME_AUDIO("enable_realtime_audio", Settings.SECTION_AUDIO, 0),
CPU_JIT("use_cpu_jit", Settings.SECTION_CORE, 1),
HW_SHADER("use_hw_shader", Settings.SECTION_RENDERER, 1),
VSYNC("use_vsync_new", Settings.SECTION_RENDERER, 1),
DEBUG_RENDERER("renderer_debug", Settings.SECTION_DEBUG, 0),
TEXTURE_FILTER("texture_filter", Settings.SECTION_RENDERER, 0),
TEXTURE_SAMPLING("texture_sampling", Settings.SECTION_RENDERER, 0),
USE_FRAME_LIMIT("use_frame_limit", Settings.SECTION_RENDERER, 1),
DELAY_RENDER_THREAD_US("delay_game_render_thread_us", Settings.SECTION_RENDERER, 0),
USE_ARTIC_BASE_CONTROLLER("use_artic_base_controller", Settings.SECTION_CONTROLS, 0),
ORIENTATION_OPTION("screen_orientation", Settings.SECTION_LAYOUT, 2),
DISABLE_RIGHT_EYE_RENDER("disable_right_eye_render", Settings.SECTION_RENDERER, 0),
TURBO_LIMIT("turbo_limit", Settings.SECTION_CORE, 200);
TURBO_LIMIT("turbo_limit", Settings.SECTION_CORE, 200),
PERFORMANCE_OVERLAY_POSITION("performance_overlay_position", Settings.SECTION_LAYOUT, 0),
ASPECT_RATIO("aspect_ratio", Settings.SECTION_LAYOUT, 0);
override var int: Int = defaultValue
@ -88,16 +73,8 @@ enum class IntSetting(
private val NOT_RUNTIME_EDITABLE = listOf(
EMULATED_REGION,
INIT_CLOCK,
NEW_3DS,
LLE_APPLETS,
GRAPHICS_API,
VSYNC,
DEBUG_RENDERER,
CPU_JIT,
ASYNC_CUSTOM_LOADING,
AUDIO_INPUT_TYPE,
USE_ARTIC_BASE_CONTROLLER,
SHADERS_ACCURATE_MUL
)
fun from(key: String): IntSetting? = IntSetting.values().firstOrNull { it.key == key }

View file

@ -111,6 +111,7 @@ class Settings {
const val SECTION_THEME = "Theme"
const val SECTION_CUSTOM_LANDSCAPE = "Custom Landscape Layout"
const val SECTION_CUSTOM_PORTRAIT = "Custom Portrait Layout"
const val SECTION_PERFORMANCE_OVERLAY = "Performance Overlay"
const val KEY_BUTTON_A = "button_a"
const val KEY_BUTTON_B = "button_b"

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -9,11 +9,11 @@ import org.citra.citra_emu.features.settings.model.AbstractIntSetting
import org.citra.citra_emu.features.settings.model.AbstractSetting
class SwitchSetting(
setting: AbstractSetting,
setting: AbstractBooleanSetting,
titleId: Int,
descriptionId: Int,
val key: String? = null,
val defaultValue: Any? = null,
val defaultValue: Boolean = false,
override var isEnabled: Boolean = true
) : SettingsItem(setting, titleId, descriptionId) {
override val type = TYPE_SWITCH
@ -21,42 +21,19 @@ class SwitchSetting(
val isChecked: Boolean
get() {
if (setting == null) {
return defaultValue as Boolean
return defaultValue
}
// Try integer setting
try {
val setting = setting as AbstractIntSetting
return setting.int == 1
} catch (_: ClassCastException) {
}
// Try boolean setting
try {
val setting = setting as AbstractBooleanSetting
return setting.boolean
} catch (_: ClassCastException) {
}
return defaultValue as Boolean
val setting = setting as AbstractBooleanSetting
return setting.boolean
}
/**
* Write a value to the backing boolean. If that boolean was previously null,
* initializes a new one and returns it, so it can be added to the Hashmap.
* Write a value to the backing boolean.
*
* @param checked Pretty self explanatory.
* @return the existing setting with the new value applied.
*/
fun setChecked(checked: Boolean): AbstractSetting {
// Try integer setting
try {
val setting = setting as AbstractIntSetting
setting.int = if (checked) 1 else 0
return setting
} catch (_: ClassCastException) {
}
// Try boolean setting
fun setChecked(checked: Boolean): AbstractBooleanSetting {
val setting = setting as AbstractBooleanSetting
setting.boolean = checked
return setting

View file

@ -67,7 +67,7 @@ class SettingsActivityPresenter(private val activityView: SettingsActivityView)
//added to ensure that layout changes take effect as soon as settings window closes
NativeLibrary.reloadSettings()
NativeLibrary.updateFramebuffer(NativeLibrary.isPortraitMode)
TurboHelper.reloadTurbo() // TODO: Can this go someone else? -OS
TurboHelper.reloadTurbo(false) // TODO: Can this go somewhere else? -OS
}
NativeLibrary.reloadSettings()
}

View file

@ -47,6 +47,7 @@ import org.citra.citra_emu.utils.BirthdayMonth
import org.citra.citra_emu.utils.Log
import org.citra.citra_emu.utils.SystemSaveGame
import org.citra.citra_emu.utils.ThemeUtil
import org.citra.citra_emu.utils.EmulationMenuSettings
class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) {
private var menuTag: String? = null
@ -102,6 +103,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
Settings.SECTION_THEME -> addThemeSettings(sl)
Settings.SECTION_CUSTOM_LANDSCAPE -> addCustomLandscapeSettings(sl)
Settings.SECTION_CUSTOM_PORTRAIT -> addCustomPortraitSettings(sl)
Settings.SECTION_PERFORMANCE_OVERLAY -> addPerformanceOverlaySettings(sl)
else -> {
fragmentView.showToastMessage("Unimplemented menu", false)
return
@ -218,11 +220,11 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
sl.apply {
add(
SwitchSetting(
IntSetting.USE_FRAME_LIMIT,
BooleanSetting.USE_FRAME_LIMIT,
R.string.frame_limit_enable,
R.string.frame_limit_enable_description,
IntSetting.USE_FRAME_LIMIT.key,
IntSetting.USE_FRAME_LIMIT.defaultValue
BooleanSetting.USE_FRAME_LIMIT.key,
BooleanSetting.USE_FRAME_LIMIT.defaultValue
)
)
add(
@ -293,20 +295,20 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
add(HeaderSetting(R.string.emulation_settings))
add(
SwitchSetting(
IntSetting.NEW_3DS,
BooleanSetting.NEW_3DS,
R.string.new_3ds,
0,
IntSetting.NEW_3DS.key,
IntSetting.NEW_3DS.defaultValue
BooleanSetting.NEW_3DS.key,
BooleanSetting.NEW_3DS.defaultValue
)
)
add(
SwitchSetting(
IntSetting.LLE_APPLETS,
BooleanSetting.LLE_APPLETS,
R.string.lle_applets,
0,
IntSetting.LLE_APPLETS.key,
IntSetting.LLE_APPLETS.defaultValue
BooleanSetting.LLE_APPLETS.key,
BooleanSetting.LLE_APPLETS.defaultValue
)
)
add(
@ -786,11 +788,11 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
add(HeaderSetting(R.string.miscellaneous))
add(
SwitchSetting(
IntSetting.USE_ARTIC_BASE_CONTROLLER,
BooleanSetting.USE_ARTIC_BASE_CONTROLLER,
R.string.use_artic_base_controller,
R.string.use_artic_base_controller_description,
IntSetting.USE_ARTIC_BASE_CONTROLLER.key,
IntSetting.USE_ARTIC_BASE_CONTROLLER.defaultValue
BooleanSetting.USE_ARTIC_BASE_CONTROLLER.key,
BooleanSetting.USE_ARTIC_BASE_CONTROLLER.defaultValue
)
)
}
@ -837,6 +839,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
BooleanSetting.SPIRV_SHADER_GEN.defaultValue,
)
)
add(
SwitchSetting(
BooleanSetting.DISABLE_SPIRV_OPTIMIZER,
R.string.disable_spirv_optimizer,
R.string.disable_spirv_optimizer_description,
BooleanSetting.DISABLE_SPIRV_OPTIMIZER.key,
BooleanSetting.DISABLE_SPIRV_OPTIMIZER.defaultValue,
)
)
add(
SwitchSetting(
BooleanSetting.ASYNC_SHADERS,
@ -859,29 +870,29 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
)
add(
SwitchSetting(
IntSetting.LINEAR_FILTERING,
BooleanSetting.LINEAR_FILTERING,
R.string.linear_filtering,
R.string.linear_filtering_description,
IntSetting.LINEAR_FILTERING.key,
IntSetting.LINEAR_FILTERING.defaultValue
BooleanSetting.LINEAR_FILTERING.key,
BooleanSetting.LINEAR_FILTERING.defaultValue
)
)
add(
SwitchSetting(
IntSetting.SHADERS_ACCURATE_MUL,
BooleanSetting.SHADERS_ACCURATE_MUL,
R.string.shaders_accurate_mul,
R.string.shaders_accurate_mul_description,
IntSetting.SHADERS_ACCURATE_MUL.key,
IntSetting.SHADERS_ACCURATE_MUL.defaultValue
BooleanSetting.SHADERS_ACCURATE_MUL.key,
BooleanSetting.SHADERS_ACCURATE_MUL.defaultValue
)
)
add(
SwitchSetting(
IntSetting.DISK_SHADER_CACHE,
BooleanSetting.DISK_SHADER_CACHE,
R.string.use_disk_shader_cache,
R.string.use_disk_shader_cache_description,
IntSetting.DISK_SHADER_CACHE.key,
IntSetting.DISK_SHADER_CACHE.defaultValue
BooleanSetting.DISK_SHADER_CACHE.key,
BooleanSetting.DISK_SHADER_CACHE.defaultValue
)
)
add(
@ -934,11 +945,11 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
)
add(
SwitchSetting(
IntSetting.DISABLE_RIGHT_EYE_RENDER,
BooleanSetting.DISABLE_RIGHT_EYE_RENDER,
R.string.disable_right_eye_render,
R.string.disable_right_eye_render_description,
IntSetting.DISABLE_RIGHT_EYE_RENDER.key,
IntSetting.DISABLE_RIGHT_EYE_RENDER.defaultValue
BooleanSetting.DISABLE_RIGHT_EYE_RENDER.key,
BooleanSetting.DISABLE_RIGHT_EYE_RENDER.defaultValue
)
)
@ -983,29 +994,29 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
add(HeaderSetting(R.string.utility))
add(
SwitchSetting(
IntSetting.DUMP_TEXTURES,
BooleanSetting.DUMP_TEXTURES,
R.string.dump_textures,
R.string.dump_textures_description,
IntSetting.DUMP_TEXTURES.key,
IntSetting.DUMP_TEXTURES.defaultValue
BooleanSetting.DUMP_TEXTURES.key,
BooleanSetting.DUMP_TEXTURES.defaultValue
)
)
add(
SwitchSetting(
IntSetting.CUSTOM_TEXTURES,
BooleanSetting.CUSTOM_TEXTURES,
R.string.custom_textures,
R.string.custom_textures_description,
IntSetting.CUSTOM_TEXTURES.key,
IntSetting.CUSTOM_TEXTURES.defaultValue
BooleanSetting.CUSTOM_TEXTURES.key,
BooleanSetting.CUSTOM_TEXTURES.defaultValue
)
)
add(
SwitchSetting(
IntSetting.ASYNC_CUSTOM_LOADING,
BooleanSetting.ASYNC_CUSTOM_LOADING,
R.string.async_custom_loading,
R.string.async_custom_loading_description,
IntSetting.ASYNC_CUSTOM_LOADING.key,
IntSetting.ASYNC_CUSTOM_LOADING.defaultValue
BooleanSetting.ASYNC_CUSTOM_LOADING.key,
BooleanSetting.ASYNC_CUSTOM_LOADING.defaultValue
)
)
@ -1070,6 +1081,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
IntSetting.SCREEN_LAYOUT.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.UPRIGHT_SCREEN,
R.string.emulation_rotate_upright,
0,
BooleanSetting.UPRIGHT_SCREEN.key,
BooleanSetting.UPRIGHT_SCREEN.defaultValue
)
)
add(
SingleChoiceSetting(
IntSetting.PORTRAIT_SCREEN_LAYOUT,
@ -1081,6 +1101,18 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
IntSetting.PORTRAIT_SCREEN_LAYOUT.defaultValue
)
)
add(
SingleChoiceSetting(
IntSetting.ASPECT_RATIO,
R.string.emulation_aspect_ratio,
0,
R.array.aspectRatioNames,
R.array.aspectRatioValues,
IntSetting.ASPECT_RATIO.key,
IntSetting.ASPECT_RATIO.defaultValue,
isEnabled = IntSetting.SCREEN_LAYOUT.int == 1,
)
)
add(
SingleChoiceSetting(
IntSetting.SMALL_SCREEN_POSITION,
@ -1116,6 +1148,14 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
FloatSetting.LARGE_SCREEN_PROPORTION.defaultValue
)
)
add(
SubmenuSetting(
R.string.performance_overlay_options,
R.string.performance_overlay_options_description,
R.drawable.ic_stats,
Settings.SECTION_PERFORMANCE_OVERLAY
)
)
add(
SubmenuSetting(
R.string.emulation_landscape_custom_layout,
@ -1135,6 +1175,116 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
}
}
private fun addPerformanceOverlaySettings(sl: ArrayList<SettingsItem>) {
settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.performance_overlay_options))
sl.apply {
add(HeaderSetting(R.string.visibility))
add(
SwitchSetting(
object : AbstractBooleanSetting {
override val key = "EmulationMenuSettings_showPerfPerformanceOverlay"
override val section = Settings.SECTION_LAYOUT
override val defaultValue = false
override var boolean: Boolean
get() = EmulationMenuSettings.showPerformanceOverlay
set(value) { EmulationMenuSettings.showPerformanceOverlay = value }
override val isRuntimeEditable = true
override val valueAsString: String get() = boolean.toString()
},
R.string.performance_overlay_enable,
0,
"EmulationMenuSettings_showPerfPerformanceOverlay",
false
)
)
add(
SwitchSetting(
BooleanSetting.OVERLAY_BACKGROUND,
R.string.overlay_background,
R.string.overlay_background_description,
"overlay_background",
false
)
)
add(
SingleChoiceSetting(
IntSetting.PERFORMANCE_OVERLAY_POSITION,
R.string.overlay_position,
R.string.overlay_position_description,
R.array.statsPosition,
R.array.statsPositionValues,
)
)
add(HeaderSetting(R.string.information))
add(
SwitchSetting(
BooleanSetting.OVERLAY_SHOW_FPS,
R.string.overlay_show_fps,
R.string.overlay_show_fps_description,
"overlay_show_fps",
true
)
)
add(
SwitchSetting(
BooleanSetting.OVERLAY_SHOW_FRAMETIME,
R.string.overlay_show_frametime,
R.string.overlay_show_frametime_description,
"overlay_show_frame_time",
true
)
)
add(
SwitchSetting(
BooleanSetting.OVERLAY_SHOW_SPEED,
R.string.overlay_show_speed,
R.string.overlay_show_speed_description,
"overlay_show_speed",
false
)
)
add(
SwitchSetting(
BooleanSetting.OVERLAY_SHOW_APP_RAM_USAGE,
R.string.overlay_show_app_ram_usage,
R.string.overlay_show_app_ram_usage_description,
"overlay_show_app_ram_usage",
false
)
)
add(
SwitchSetting(
BooleanSetting.OVERLAY_SHOW_AVAILABLE_RAM,
R.string.overlay_show_available_ram,
R.string.overlay_show_available_ram_description,
"overlay_show_available_ram",
false
)
)
add(
SwitchSetting(
BooleanSetting.OVERLAY_SHOW_BATTERY_TEMP,
R.string.overlay_show_battery_temp,
R.string.overlay_show_battery_temp_description,
"overlay_show_battery_temp",
false
)
)
}
}
private fun addCustomLandscapeSettings(sl: ArrayList<SettingsItem>) {
settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.emulation_landscape_custom_layout))
sl.apply {
@ -1362,20 +1512,20 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
)
add(
SwitchSetting(
IntSetting.ENABLE_AUDIO_STRETCHING,
BooleanSetting.ENABLE_AUDIO_STRETCHING,
R.string.audio_stretch,
R.string.audio_stretch_description,
IntSetting.ENABLE_AUDIO_STRETCHING.key,
IntSetting.ENABLE_AUDIO_STRETCHING.defaultValue
BooleanSetting.ENABLE_AUDIO_STRETCHING.key,
BooleanSetting.ENABLE_AUDIO_STRETCHING.defaultValue
)
)
add(
SwitchSetting(
IntSetting.ENABLE_REALTIME_AUDIO,
BooleanSetting.ENABLE_REALTIME_AUDIO,
R.string.realtime_audio,
R.string.realtime_audio_description,
IntSetting.ENABLE_REALTIME_AUDIO.key,
IntSetting.ENABLE_REALTIME_AUDIO.defaultValue
BooleanSetting.ENABLE_REALTIME_AUDIO.key,
BooleanSetting.ENABLE_REALTIME_AUDIO.defaultValue
)
)
add(
@ -1430,38 +1580,47 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
)
add(
SwitchSetting(
IntSetting.CPU_JIT,
BooleanSetting.CPU_JIT,
R.string.cpu_jit,
R.string.cpu_jit_description,
IntSetting.CPU_JIT.key,
IntSetting.CPU_JIT.defaultValue
BooleanSetting.CPU_JIT.key,
BooleanSetting.CPU_JIT.defaultValue
)
)
add(
SwitchSetting(
IntSetting.HW_SHADER,
BooleanSetting.HW_SHADER,
R.string.hw_shaders,
R.string.hw_shaders_description,
IntSetting.HW_SHADER.key,
IntSetting.HW_SHADER.defaultValue
BooleanSetting.HW_SHADER.key,
BooleanSetting.HW_SHADER.defaultValue
)
)
add(
SwitchSetting(
IntSetting.VSYNC,
BooleanSetting.SHADER_JIT,
R.string.shader_jit,
R.string.shader_jit_description,
BooleanSetting.SHADER_JIT.key,
BooleanSetting.SHADER_JIT.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.VSYNC,
R.string.vsync,
R.string.vsync_description,
IntSetting.VSYNC.key,
IntSetting.VSYNC.defaultValue
BooleanSetting.VSYNC.key,
BooleanSetting.VSYNC.defaultValue
)
)
add(
SwitchSetting(
IntSetting.DEBUG_RENDERER,
BooleanSetting.DEBUG_RENDERER,
R.string.renderer_debug,
R.string.renderer_debug_description,
IntSetting.DEBUG_RENDERER.key,
IntSetting.DEBUG_RENDERER.defaultValue
BooleanSetting.DEBUG_RENDERER.key,
BooleanSetting.DEBUG_RENDERER.defaultValue
)
)
add(
@ -1473,6 +1632,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
BooleanSetting.INSTANT_DEBUG_LOG.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.ENABLE_RPC_SERVER,
R.string.enable_rpc_server,
R.string.enable_rpc_server_desc,
BooleanSetting.ENABLE_RPC_SERVER.key,
BooleanSetting.ENABLE_RPC_SERVER.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.DELAY_START_LLE_MODULES,

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -141,7 +141,7 @@ class CopyDirProgressDialog : DialogFragment() {
override fun onComplete() {
CitraDirectoryHelper.initializeCitraDirectory(path)
callback?.onStepCompleted()
callback?.onStepCompleted(0, false)
viewModel.setCopyComplete(true)
}
})

View file

@ -5,10 +5,14 @@
package org.citra.citra_emu.fragments
import android.annotation.SuppressLint
import android.app.ActivityManager
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.IntentFilter
import android.content.SharedPreferences
import android.net.Uri
import android.os.BatteryManager
import android.os.Bundle
import android.os.Handler
import android.os.Looper
@ -16,6 +20,7 @@ import android.os.SystemClock
import android.text.Editable
import android.text.TextWatcher
import android.view.Choreographer
import android.view.Gravity
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.Surface
@ -27,6 +32,7 @@ import android.widget.PopupMenu
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.Insets
import androidx.core.view.ViewCompat
@ -44,6 +50,7 @@ import androidx.navigation.fragment.navArgs
import androidx.preference.PreferenceManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.slider.Slider
import java.io.File
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import org.citra.citra_emu.CitraApplication
@ -57,6 +64,7 @@ import org.citra.citra_emu.databinding.FragmentEmulationBinding
import org.citra.citra_emu.display.PortraitScreenLayout
import org.citra.citra_emu.display.ScreenAdjustmentUtil
import org.citra.citra_emu.display.ScreenLayout
import org.citra.citra_emu.features.settings.model.BooleanSetting
import org.citra.citra_emu.features.settings.model.IntSetting
import org.citra.citra_emu.features.settings.model.SettingsViewModel
import org.citra.citra_emu.features.settings.ui.SettingsActivity
@ -175,8 +183,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
binding.surfaceInputOverlay.setIsInEditMode(false)
}
// Show/hide the "Show FPS" overlay
updateShowFpsOverlay()
// Show/hide the "Stats" overlay
updateShowPerformanceOverlay()
val position = IntSetting.PERFORMANCE_OVERLAY_POSITION.int
updateStatsPosition(position)
binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
binding.drawerLayout.addDrawerListener(object : DrawerListener {
@ -295,6 +306,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
true
}
R.id.menu_rotate_upright -> {
screenAdjustmentUtil.toggleScreenUpright()
true
}
R.id.menu_lock_drawer -> {
when (EmulationMenuSettings.drawerLockMode) {
DrawerLayout.LOCK_MODE_UNLOCKED -> {
@ -455,6 +471,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
Choreographer.getInstance().postFrameCallback(this)
if (NativeLibrary.isRunning()) {
NativeLibrary.unPauseEmulation()
// If the overlay is enabled, we need to update the position if changed
val position = IntSetting.PERFORMANCE_OVERLAY_POSITION.int
updateStatsPosition(position)
binding.inGameMenu.menu.findItem(R.id.menu_emulation_pause)?.let { menuItem ->
menuItem.title = resources.getString(R.string.pause_emulation)
menuItem.icon = ResourcesCompat.getDrawable(
@ -640,7 +661,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
popupMenu.menu.apply {
findItem(R.id.menu_show_overlay).isChecked = EmulationMenuSettings.showOverlay
findItem(R.id.menu_show_fps).isChecked = EmulationMenuSettings.showFps
findItem(R.id.menu_performance_overlay_show).isChecked =
EmulationMenuSettings.showPerformanceOverlay
findItem(R.id.menu_haptic_feedback).isChecked = EmulationMenuSettings.hapticFeedback
findItem(R.id.menu_emulation_joystick_rel_center).isChecked =
EmulationMenuSettings.joystickRelCenter
@ -656,15 +678,14 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
true
}
R.id.menu_show_fps -> {
EmulationMenuSettings.showFps = !EmulationMenuSettings.showFps
updateShowFpsOverlay()
R.id.menu_performance_overlay_show -> {
EmulationMenuSettings.showPerformanceOverlay = !EmulationMenuSettings.showPerformanceOverlay
updateShowPerformanceOverlay()
true
}
R.id.menu_haptic_feedback -> {
EmulationMenuSettings.hapticFeedback = !EmulationMenuSettings.hapticFeedback
updateShowFpsOverlay()
true
}
@ -1149,34 +1170,150 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
binding.surfaceInputOverlay.resetButtonPlacement()
}
fun updateShowFpsOverlay() {
if (EmulationMenuSettings.showFps) {
fun updateShowPerformanceOverlay() {
if (perfStatsUpdater != null) {
perfStatsUpdateHandler.removeCallbacks(perfStatsUpdater!!)
}
if (EmulationMenuSettings.showPerformanceOverlay) {
val SYSTEM_FPS = 0
val FPS = 1
val FRAMETIME = 2
val SPEED = 3
val SPEED = 2
val FRAMETIME = 3
val TIME_SVC = 4
val TIME_IPC = 5
val TIME_GPU = 6
val TIME_SWAP = 7
val TIME_REM = 8
perfStatsUpdater = Runnable {
val sb = StringBuilder()
val perfStats = NativeLibrary.getPerfStats()
val dividerString = "\u00A0\u2502 "
if (perfStats[FPS] > 0) {
binding.showFpsText.text = String.format(
"FPS: %d Speed: %d%% FT: %.2fms",
(perfStats[FPS] + 0.5).toInt(),
(perfStats[SPEED] * 100.0 + 0.5).toInt(),
(perfStats[FRAMETIME] * 1000.0f).toFloat()
)
if (BooleanSetting.OVERLAY_SHOW_FPS.boolean) {
sb.append(String.format("FPS:\u00A0%d", (perfStats[FPS] + 0.5).toInt()))
}
if (BooleanSetting.OVERLAY_SHOW_FRAMETIME.boolean) {
if (sb.isNotEmpty()) sb.append(dividerString)
sb.append(
String.format(
"Frame:\u00A0%.1fms (GPU: [CMD:\u00A0%.1fms SWP:\u00A0%.1fms] IPC:\u00A0%.1fms SVC:\u00A0%.1fms Rem:\u00A0%.1fms)",
(perfStats[FRAMETIME] * 1000.0f).toFloat(),
(perfStats[TIME_GPU] * 1000.0f).toFloat(),
(perfStats[TIME_SWAP] * 1000.0f).toFloat(),
(perfStats[TIME_IPC] * 1000.0f).toFloat(),
(perfStats[TIME_SVC] * 1000.0f).toFloat(),
(perfStats[TIME_REM] * 1000.0f).toFloat(),
)
)
}
if (BooleanSetting.OVERLAY_SHOW_SPEED.boolean) {
if (sb.isNotEmpty()) sb.append(dividerString)
sb.append(
String.format(
"Speed:\u00A0%d%%",
(perfStats[SPEED] * 100.0 + 0.5).toInt()
)
)
}
if (BooleanSetting.OVERLAY_SHOW_APP_RAM_USAGE.boolean) {
if (sb.isNotEmpty()) sb.append(dividerString)
val appRamUsage =
File("/proc/self/statm").readLines()[0].split(' ')[1].toLong() * 4096 / 1000000
sb.append("Process\u00A0RAM:\u00A0$appRamUsage\u00A0MB")
}
if (BooleanSetting.OVERLAY_SHOW_AVAILABLE_RAM.boolean) {
if (sb.isNotEmpty()) sb.append(dividerString)
context?.let { ctx ->
val activityManager =
ctx.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val memInfo = ActivityManager.MemoryInfo()
activityManager.getMemoryInfo(memInfo)
val megabyteBytes = 1048576L
val availableRam = memInfo.availMem / megabyteBytes
sb.append("Available\u00A0RAM:\u00A0$availableRam\u00A0MB")
}
}
if (BooleanSetting.OVERLAY_SHOW_BATTERY_TEMP.boolean) {
if (sb.isNotEmpty()) sb.append(dividerString)
val batteryTemp = getBatteryTemperature()
val tempF = celsiusToFahrenheit(batteryTemp)
sb.append(String.format("%.1f°C/%.1f°F", batteryTemp, tempF))
}
if (BooleanSetting.OVERLAY_BACKGROUND.boolean) {
binding.performanceOverlayShowText.setBackgroundResource(R.color.citra_transparent_black)
} else {
binding.performanceOverlayShowText.setBackgroundResource(0)
}
binding.performanceOverlayShowText.text = sb.toString()
}
perfStatsUpdateHandler.postDelayed(perfStatsUpdater!!, 3000)
perfStatsUpdateHandler.postDelayed(perfStatsUpdater!!, 1000)
}
perfStatsUpdateHandler.post(perfStatsUpdater!!)
binding.showFpsText.visibility = View.VISIBLE
binding.performanceOverlayShowText.visibility = View.VISIBLE
} else {
if (perfStatsUpdater != null) {
perfStatsUpdateHandler.removeCallbacks(perfStatsUpdater!!)
}
binding.showFpsText.visibility = View.GONE
binding.performanceOverlayShowText.visibility = View.GONE
}
}
private fun updateStatsPosition(position: Int) {
val params = binding.performanceOverlayShowText.layoutParams as CoordinatorLayout.LayoutParams
val padding = (20 * resources.displayMetrics.density).toInt() // 20dp
params.setMargins(padding, 0, padding, 0)
when (position) {
0 -> {
params.gravity = (Gravity.TOP or Gravity.START)
}
1 -> {
params.gravity = (Gravity.TOP or Gravity.CENTER_HORIZONTAL)
}
2 -> {
params.gravity = (Gravity.TOP or Gravity.END)
}
3 -> {
params.gravity = (Gravity.BOTTOM or Gravity.START)
}
4 -> {
params.gravity = (Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL)
}
5 -> {
params.gravity = (Gravity.BOTTOM or Gravity.END)
}
}
binding.performanceOverlayShowText.layoutParams = params
}
private fun getBatteryTemperature(): Float {
try {
val batteryIntent = requireContext().registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
// Temperature in tenths of a degree Celsius
val temperature = batteryIntent?.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0) ?: 0
// Convert to degrees Celsius
return temperature / 10.0f
} catch (e: Exception) {
return 0.0f
}
}
private fun celsiusToFahrenheit(celsius: Float): Float {
return (celsius * 9 / 5) + 32
}
override fun surfaceCreated(holder: SurfaceHolder) {
// We purposely don't do anything here.
// All work is done in surfaceChanged, which we are guaranteed to get even for surface creation.
@ -1211,23 +1348,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
v.setPadding(left, cutInsets.top, right, 0)
// Ensure FPS text doesn't get cut off by rounded display corners
val sidePadding = resources.getDimensionPixelSize(R.dimen.spacing_large)
if (cutInsets.left == 0) {
binding.showFpsText.setPadding(
sidePadding,
cutInsets.top,
cutInsets.right,
cutInsets.bottom
)
} else {
binding.showFpsText.setPadding(
cutInsets.left,
cutInsets.top,
cutInsets.right,
cutInsets.bottom
)
}
windowInsets
}
}

View file

@ -5,6 +5,7 @@
package org.citra.citra_emu.fragments
import android.annotation.SuppressLint
import android.net.Uri
import android.os.Bundle
import android.text.method.LinkMovementMethod
import android.view.LayoutInflater
@ -12,7 +13,10 @@ import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.edit
import androidx.core.text.HtmlCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
@ -36,8 +40,6 @@ import org.citra.citra_emu.features.settings.model.Settings
import org.citra.citra_emu.model.Game
import org.citra.citra_emu.viewmodel.GamesViewModel
import org.citra.citra_emu.viewmodel.HomeViewModel
import androidx.core.content.edit
import androidx.core.text.HtmlCompat
class GamesFragment : Fragment() {
private var _binding: FragmentGamesBinding? = null
@ -46,6 +48,13 @@ class GamesFragment : Fragment() {
private val gamesViewModel: GamesViewModel by activityViewModels()
private val homeViewModel: HomeViewModel by activityViewModels()
private var show3DSFileWarning: Boolean = true
private lateinit var gameAdapter: GameAdapter
private val openImageLauncher = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri: Uri? ->
gameAdapter.handleShortcutImageResult(uri)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -69,12 +78,18 @@ class GamesFragment : Fragment() {
val inflater = LayoutInflater.from(requireContext())
gameAdapter = GameAdapter(
requireActivity() as AppCompatActivity,
inflater,
openImageLauncher
)
binding.gridGames.apply {
layoutManager = GridLayoutManager(
requireContext(),
resources.getInteger(R.integer.game_grid_columns)
)
adapter = GameAdapter(requireActivity() as AppCompatActivity, inflater)
adapter = this@GamesFragment.gameAdapter
}
binding.swipeRefresh.apply {

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -36,6 +36,8 @@ import org.citra.citra_emu.viewmodel.GamesViewModel
import org.citra.citra_emu.viewmodel.HomeViewModel
import java.time.temporal.ChronoField
import java.util.Locale
import android.net.Uri
import androidx.activity.result.contract.ActivityResultContracts
class SearchFragment : Fragment() {
private var _binding: FragmentSearchBinding? = null
@ -43,6 +45,13 @@ class SearchFragment : Fragment() {
private val gamesViewModel: GamesViewModel by activityViewModels()
private val homeViewModel: HomeViewModel by activityViewModels()
private lateinit var gameAdapter: GameAdapter
private val openImageLauncher = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri: Uri? ->
gameAdapter.handleShortcutImageResult(uri)
}
private lateinit var preferences: SharedPreferences
@ -73,12 +82,18 @@ class SearchFragment : Fragment() {
val inflater = LayoutInflater.from(requireContext())
gameAdapter = GameAdapter(
requireActivity() as AppCompatActivity,
inflater,
openImageLauncher
)
binding.gridGamesSearch.apply {
layoutManager = GridLayoutManager(
requireContext(),
resources.getInteger(R.integer.game_grid_columns)
)
adapter = GameAdapter(requireActivity() as AppCompatActivity, inflater)
adapter = this@SearchFragment.gameAdapter
}
binding.chipGroup.setOnCheckedStateChangeListener { _, _ -> filterAndSearch() }

View file

@ -27,7 +27,7 @@ class SelectUserDirectoryDialogFragment : DialogFragment() {
.setTitle(R.string.select_citra_user_folder)
.setMessage(R.string.selecting_user_directory_without_write_permissions)
.setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
mainActivity?.openCitraDirectory?.launch(null)
mainActivity?.openCitraDirectoryLostPermission?.launch(null)
}
.show()
}

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -35,9 +35,11 @@ import org.citra.citra_emu.R
import org.citra.citra_emu.adapters.SetupAdapter
import org.citra.citra_emu.databinding.FragmentSetupBinding
import org.citra.citra_emu.features.settings.model.Settings
import org.citra.citra_emu.model.ButtonState
import org.citra.citra_emu.model.PageButton
import org.citra.citra_emu.model.PageState
import org.citra.citra_emu.model.SetupCallback
import org.citra.citra_emu.model.SetupPage
import org.citra.citra_emu.model.StepState
import org.citra.citra_emu.ui.main.MainActivity
import org.citra.citra_emu.utils.CitraDirectoryHelper
import org.citra.citra_emu.utils.GameHelper
@ -113,151 +115,195 @@ class SetupFragment : Fragment() {
0,
true,
R.string.get_started,
{ pageForward() }
)
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
add(
SetupPage(
R.drawable.ic_notification,
R.string.notifications,
R.string.notifications_description,
0,
false,
R.string.give_permission,
{
notificationCallback = it
permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
},
false,
true,
{
if (NotificationManagerCompat.from(requireContext())
.areNotificationsEnabled()
) {
StepState.STEP_COMPLETE
} else {
StepState.STEP_INCOMPLETE
}
},
R.string.notification_warning,
R.string.notification_warning_description,
0
)
)
}
add(
SetupPage(
R.drawable.ic_microphone,
R.string.microphone_permission,
R.string.microphone_permission_description,
0,
false,
R.string.give_permission,
{
microphoneCallback = it
permissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
},
false,
false,
{
if (
ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED
) {
StepState.STEP_COMPLETE
} else {
StepState.STEP_INCOMPLETE
}
pageButtons = mutableListOf<PageButton>().apply {
add(
PageButton(
R.drawable.ic_arrow_forward,
R.string.get_started,
0,
buttonAction = {
pageForward()
},
buttonState = {
ButtonState.BUTTON_ACTION_UNDEFINED
}
)
)
}
)
)
add(
SetupPage(
R.drawable.ic_camera,
R.string.camera_permission,
R.string.camera_permission_description,
R.drawable.ic_permission,
R.string.permissions,
R.string.permissions_description,
0,
false,
R.string.give_permission,
{
cameraCallback = it
permissionLauncher.launch(Manifest.permission.CAMERA)
},
false,
false,
{
if (
ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
) {
StepState.STEP_COMPLETE
} else {
StepState.STEP_INCOMPLETE
0,
pageButtons = mutableListOf<PageButton>().apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
add(
PageButton(
R.drawable.ic_notification,
R.string.notifications,
R.string.notifications_description,
buttonAction = {
pageButtonCallback = it
permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
},
buttonState = {
if (NotificationManagerCompat.from(requireContext())
.areNotificationsEnabled()
) {
ButtonState.BUTTON_ACTION_COMPLETE
} else {
ButtonState.BUTTON_ACTION_INCOMPLETE
}
},
isUnskippable = false,
hasWarning = true,
R.string.notification_warning,
R.string.notification_warning_description,
)
)
}
}
)
)
add(
SetupPage(
R.drawable.ic_home,
R.string.select_citra_user_folder,
R.string.select_citra_user_folder_description,
0,
true,
R.string.select,
{
userDirCallback = it
openCitraDirectory.launch(null)
},
true,
true,
{
if (PermissionsHandler.hasWriteAccess(requireContext())) {
StepState.STEP_COMPLETE
} else {
StepState.STEP_INCOMPLETE
}
},
R.string.cannot_skip,
R.string.cannot_skip_directory_description,
R.string.cannot_skip_directory_help
)
)
add(
SetupPage(
R.drawable.ic_controller,
R.string.games,
R.string.games_description,
0,
true,
R.string.select,
{
gamesDirCallback = it
getGamesDirectory.launch(
Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data
add(
PageButton(
R.drawable.ic_microphone,
R.string.microphone_permission,
R.string.microphone_permission_description,
buttonAction = {
pageButtonCallback = it
permissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
},
buttonState = {
if (ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED
) {
ButtonState.BUTTON_ACTION_COMPLETE
} else {
ButtonState.BUTTON_ACTION_INCOMPLETE
}
},
)
)
add(
PageButton(
R.drawable.ic_camera,
R.string.camera_permission,
R.string.camera_permission_description,
buttonAction = {
pageButtonCallback = it
permissionLauncher.launch(Manifest.permission.CAMERA)
},
buttonState = {
if (ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
) {
ButtonState.BUTTON_ACTION_COMPLETE
} else {
ButtonState.BUTTON_ACTION_INCOMPLETE
}
},
)
)
},
false,
true,
{
if (preferences.getString(GameHelper.KEY_GAME_PATH, "")!!.isNotEmpty()) {
StepState.STEP_COMPLETE
} else {
StepState.STEP_INCOMPLETE
}
},
R.string.add_games_warning,
R.string.add_games_warning_description,
R.string.add_games_warning_help
)
) {
if (
ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED &&
NotificationManagerCompat.from(requireContext())
.areNotificationsEnabled()
) {
PageState.PAGE_STEPS_COMPLETE
} else {
PageState.PAGE_STEPS_INCOMPLETE
}
}
)
add(
SetupPage(
R.drawable.ic_folder,
R.string.select_emulator_data_folders,
R.string.select_emulator_data_folders_description,
0,
true,
R.string.select,
pageButtons = mutableListOf<PageButton>().apply {
add(
PageButton(
R.drawable.ic_home,
R.string.select_citra_user_folder,
R.string.select_citra_user_folder_description,
buttonAction = {
pageButtonCallback = it
openCitraDirectory.launch(null)
},
buttonState = {
if (PermissionsHandler.hasWriteAccess(requireContext())) {
ButtonState.BUTTON_ACTION_COMPLETE
} else {
ButtonState.BUTTON_ACTION_INCOMPLETE
}
},
isUnskippable = true,
hasWarning = false,
R.string.cannot_skip,
R.string.cannot_skip_directory_description,
R.string.cannot_skip_directory_help
)
)
add(
PageButton(
R.drawable.ic_controller,
R.string.games,
R.string.games_description,
buttonAction = {
pageButtonCallback = it
getGamesDirectory.launch(
Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data
)
},
buttonState = {
if (preferences.getString(GameHelper.KEY_GAME_PATH, "")!!.isNotEmpty()) {
ButtonState.BUTTON_ACTION_COMPLETE
} else {
ButtonState.BUTTON_ACTION_INCOMPLETE
}
},
isUnskippable = false,
hasWarning = true,
R.string.add_games_warning,
R.string.add_games_warning_description,
)
)
},
) {
if (
PermissionsHandler.hasWriteAccess(requireContext()) &&
preferences.getString(GameHelper.KEY_GAME_PATH, "")!!.isNotEmpty()
) {
PageState.PAGE_STEPS_COMPLETE
} else {
PageState.PAGE_STEPS_INCOMPLETE
}
}
)
add(
SetupPage(
R.drawable.ic_check,
@ -266,7 +312,21 @@ class SetupFragment : Fragment() {
R.drawable.ic_arrow_forward,
false,
R.string.text_continue,
{ finishSetup() }
pageButtons = mutableListOf<PageButton>().apply {
add(
PageButton(
R.drawable.ic_arrow_forward,
R.string.text_continue,
0,
buttonAction = {
finishSetup()
},
buttonState = {
ButtonState.BUTTON_ACTION_UNDEFINED
}
)
)
}
)
)
}
@ -303,35 +363,47 @@ class SetupFragment : Fragment() {
val index = binding.viewPager2.currentItem
val currentPage = pages[index]
// Checks if the user has completed the task on the current page
if (currentPage.hasWarning || currentPage.isUnskippable) {
val stepState = currentPage.stepCompleted.invoke()
if (stepState == StepState.STEP_COMPLETE ||
stepState == StepState.STEP_UNDEFINED
) {
pageForward()
return@setOnClickListener
}
// This allows multiple sets of warning messages to be displayed on the same dialog if necessary
val warningMessages =
mutableListOf<Triple<Int, Int, Int>>() // title, description, helpLink
if (currentPage.isUnskippable) {
MessageDialogFragment.newInstance(
currentPage.warningTitleId,
currentPage.warningDescriptionId,
currentPage.warningHelpLinkId
).show(childFragmentManager, MessageDialogFragment.TAG)
return@setOnClickListener
}
currentPage.pageButtons?.forEach { button ->
if (button.hasWarning || button.isUnskippable) {
val buttonState = button.buttonState()
if (buttonState == ButtonState.BUTTON_ACTION_COMPLETE) {
return@forEach
}
if (!hasBeenWarned[index]) {
SetupWarningDialogFragment.newInstance(
currentPage.warningTitleId,
currentPage.warningDescriptionId,
currentPage.warningHelpLinkId,
index
).show(childFragmentManager, SetupWarningDialogFragment.TAG)
return@setOnClickListener
if (button.isUnskippable) {
MessageDialogFragment.newInstance(
button.warningTitleId,
button.warningDescriptionId,
button.warningHelpLinkId
).show(childFragmentManager, MessageDialogFragment.TAG)
return@setOnClickListener
}
if (!hasBeenWarned[index]) {
warningMessages.add(
Triple(
button.warningTitleId,
button.warningDescriptionId,
button.warningHelpLinkId
)
)
}
}
}
if (warningMessages.isNotEmpty()) {
SetupWarningDialogFragment.newInstance(
warningMessages.map { it.first }.toIntArray(),
warningMessages.map { it.second }.toIntArray(),
warningMessages.map { it.third }.toIntArray(),
index
).show(childFragmentManager, SetupWarningDialogFragment.TAG)
return@setOnClickListener
}
pageForward()
}
binding.buttonBack.setOnClickListener { pageBackward() }
@ -366,19 +438,24 @@ class SetupFragment : Fragment() {
_binding = null
}
private lateinit var notificationCallback: SetupCallback
private lateinit var microphoneCallback: SetupCallback
private lateinit var cameraCallback: SetupCallback
private lateinit var pageButtonCallback: SetupCallback
private val checkForButtonState: () -> Unit = {
val page = pages[binding.viewPager2.currentItem]
page.pageButtons?.forEach {
if (it.buttonState() == ButtonState.BUTTON_ACTION_COMPLETE) {
pageButtonCallback.onStepCompleted(it.titleId, pageFullyCompleted = false)
}
if (page.pageSteps() == PageState.PAGE_STEPS_COMPLETE) {
pageButtonCallback.onStepCompleted(0, pageFullyCompleted = true)
}
}
}
private val permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
if (isGranted) {
val page = pages[binding.viewPager2.currentItem]
when (page.titleId) {
R.string.notifications -> notificationCallback.onStepCompleted()
R.string.microphone_permission -> microphoneCallback.onStepCompleted()
R.string.camera_permission -> cameraCallback.onStepCompleted()
}
checkForButtonState.invoke()
return@registerForActivityResult
}
@ -394,8 +471,6 @@ class SetupFragment : Fragment() {
.show()
}
private lateinit var userDirCallback: SetupCallback
private val openCitraDirectory = registerForActivityResult<Uri, Uri>(
ActivityResultContracts.OpenDocumentTree()
) { result: Uri? ->
@ -403,11 +478,9 @@ class SetupFragment : Fragment() {
return@registerForActivityResult
}
CitraDirectoryHelper(requireActivity()).showCitraDirectoryDialog(result, userDirCallback)
CitraDirectoryHelper(requireActivity(), true).showCitraDirectoryDialog(result, pageButtonCallback, checkForButtonState)
}
private lateinit var gamesDirCallback: SetupCallback
private val getGamesDirectory =
registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result ->
if (result == null) {
@ -427,7 +500,7 @@ class SetupFragment : Fragment() {
homeViewModel.setGamesDir(requireActivity(), result.path!!)
gamesDirCallback.onStepCompleted()
checkForButtonState.invoke()
}
private fun finishSetup() {

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -14,18 +14,18 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.citra.citra_emu.R
class SetupWarningDialogFragment : DialogFragment() {
private var titleId: Int = 0
private var descriptionId: Int = 0
private var helpLinkId: Int = 0
private var titleIds: IntArray = intArrayOf()
private var descriptionIds: IntArray = intArrayOf()
private var helpLinkIds: IntArray = intArrayOf()
private var page: Int = 0
private lateinit var setupFragment: SetupFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
titleId = requireArguments().getInt(TITLE)
descriptionId = requireArguments().getInt(DESCRIPTION)
helpLinkId = requireArguments().getInt(HELP_LINK)
titleIds = requireArguments().getIntArray(TITLES) ?: intArrayOf()
descriptionIds = requireArguments().getIntArray(DESCRIPTIONS) ?: intArrayOf()
helpLinkIds = requireArguments().getIntArray(HELP_LINKS) ?: intArrayOf()
page = requireArguments().getInt(PAGE)
setupFragment = requireParentFragment() as SetupFragment
@ -39,16 +39,23 @@ class SetupWarningDialogFragment : DialogFragment() {
}
.setNegativeButton(R.string.warning_cancel, null)
if (titleId != 0) {
builder.setTitle(titleId)
} else {
builder.setTitle("")
// Message builder to build multiple strings into one
val messageBuilder = StringBuilder()
for (i in titleIds.indices) {
if (titleIds[i] != 0) {
messageBuilder.append(getString(titleIds[i])).append("\n\n")
}
if (descriptionIds[i] != 0) {
messageBuilder.append(getString(descriptionIds[i])).append("\n\n")
}
}
if (descriptionId != 0) {
builder.setMessage(descriptionId)
}
if (helpLinkId != 0) {
builder.setTitle("Warning")
builder.setMessage(messageBuilder.toString().trim())
if (helpLinkIds.any { it != 0 }) {
builder.setNeutralButton(R.string.warning_help) { _: DialogInterface?, _: Int ->
val helpLinkId = helpLinkIds.first { it != 0 }
val helpLink = resources.getString(helpLinkId)
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(helpLink))
startActivity(intent)
@ -61,23 +68,23 @@ class SetupWarningDialogFragment : DialogFragment() {
companion object {
const val TAG = "SetupWarningDialogFragment"
private const val TITLE = "Title"
private const val DESCRIPTION = "Description"
private const val HELP_LINK = "HelpLink"
private const val TITLES = "Titles"
private const val DESCRIPTIONS = "Descriptions"
private const val HELP_LINKS = "HelpLinks"
private const val PAGE = "Page"
fun newInstance(
titleId: Int,
descriptionId: Int,
helpLinkId: Int,
titleIds: IntArray,
descriptionIds: IntArray,
helpLinkIds: IntArray,
page: Int
): SetupWarningDialogFragment {
val dialog = SetupWarningDialogFragment()
val bundle = Bundle()
bundle.apply {
putInt(TITLE, titleId)
putInt(DESCRIPTION, descriptionId)
putInt(HELP_LINK, helpLinkId)
putIntArray(TITLES, titleIds)
putIntArray(DESCRIPTIONS, descriptionIds)
putIntArray(HELP_LINKS, helpLinkIds)
putInt(PAGE, page)
}
dialog.arguments = bundle

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -11,21 +11,35 @@ data class SetupPage(
val buttonIconId: Int,
val leftAlignedIcon: Boolean,
val buttonTextId: Int,
val pageButtons: List<PageButton>? = null,
val pageSteps: () -> PageState = { PageState.PAGE_STEPS_UNDEFINED },
)
data class PageButton(
val iconId: Int,
val titleId: Int,
val descriptionId: Int,
val buttonAction: (callback: SetupCallback) -> Unit,
val buttonState: () -> ButtonState = { ButtonState.BUTTON_ACTION_UNDEFINED },
val isUnskippable: Boolean = false,
val hasWarning: Boolean = false,
val stepCompleted: () -> StepState = { StepState.STEP_UNDEFINED },
val warningTitleId: Int = 0,
val warningDescriptionId: Int = 0,
val warningHelpLinkId: Int = 0
)
interface SetupCallback {
fun onStepCompleted()
fun onStepCompleted(pageButtonId : Int, pageFullyCompleted: Boolean)
}
enum class StepState {
STEP_COMPLETE,
STEP_INCOMPLETE,
STEP_UNDEFINED
enum class PageState {
PAGE_STEPS_COMPLETE,
PAGE_STEPS_INCOMPLETE,
PAGE_STEPS_UNDEFINED
}
enum class ButtonState {
BUTTON_ACTION_COMPLETE,
BUTTON_ACTION_INCOMPLETE,
BUTTON_ACTION_UNDEFINED
}

View file

@ -107,7 +107,7 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
}
if (button.id == NativeLibrary.ButtonType.BUTTON_TURBO && button.status == NativeLibrary.ButtonState.PRESSED) {
TurboHelper.setTurboEnabled((!TurboHelper.isTurboSpeedEnabled()))
TurboHelper.toggleTurbo(true)
}
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.id, button.status)

View file

@ -12,6 +12,7 @@ import android.view.ViewGroup.MarginLayoutParams
import android.view.WindowManager
import android.view.animation.PathInterpolator
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
@ -307,16 +308,22 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
windowInsets
}
val openCitraDirectory = registerForActivityResult(
ActivityResultContracts.OpenDocumentTree()
) { result: Uri? ->
if (result == null) {
return@registerForActivityResult
}
private fun createOpenCitraDirectoryLauncher(
permissionsLost: Boolean
): ActivityResultLauncher<Uri?> {
return registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result: Uri? ->
if (result == null) {
return@registerForActivityResult
}
CitraDirectoryHelper(this@MainActivity).showCitraDirectoryDialog(result)
CitraDirectoryHelper(this@MainActivity, permissionsLost)
.showCitraDirectoryDialog(result, buttonState = {})
}
}
val openCitraDirectory = createOpenCitraDirectoryLauncher(permissionsLost = false)
val openCitraDirectoryLostPermission = createOpenCitraDirectoryLauncher(permissionsLost = true)
val ciaFileInstaller = registerForActivityResult(
OpenFileResultContract()
) { result: Intent? ->

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -16,15 +16,15 @@ import org.citra.citra_emu.viewmodel.HomeViewModel
/**
* Citra directory initialization ui flow controller.
*/
class CitraDirectoryHelper(private val fragmentActivity: FragmentActivity) {
fun showCitraDirectoryDialog(result: Uri, callback: SetupCallback? = null) {
class CitraDirectoryHelper(private val fragmentActivity: FragmentActivity, private val lostPermission: Boolean) {
fun showCitraDirectoryDialog(result: Uri, callback: SetupCallback? = null, buttonState: () -> Unit) {
val citraDirectoryDialog = CitraDirectoryDialogFragment.newInstance(
fragmentActivity,
result.toString(),
CitraDirectoryDialogFragment.Listener { moveData: Boolean, path: Uri ->
val previous = PermissionsHandler.citraDirectory
// Do noting if user select the previous path.
if (path == previous) {
if (path == previous && !lostPermission) {
return@Listener
}
@ -36,7 +36,7 @@ class CitraDirectoryHelper(private val fragmentActivity: FragmentActivity) {
)
if (!moveData || previous.toString().isEmpty()) {
initializeCitraDirectory(path)
callback?.onStepCompleted()
buttonState()
val viewModel = ViewModelProvider(fragmentActivity)[HomeViewModel::class.java]
viewModel.setUserDir(fragmentActivity, path.path!!)
viewModel.setPickingUserDir(false)

View file

@ -27,11 +27,11 @@ object EmulationMenuSettings {
.apply()
}
var showFps: Boolean
get() = preferences.getBoolean("EmulationMenuSettings_ShowFps", false)
var showPerformanceOverlay: Boolean
get() = preferences.getBoolean("EmulationMenuSettings_showPerformanceOverlay", false)
set(value) {
preferences.edit()
.putBoolean("EmulationMenuSettings_ShowFps", value)
.putBoolean("EmulationMenuSettings_showPerformanceOverlay", value)
.apply()
}
var hapticFeedback: Boolean

View file

@ -1,4 +1,4 @@
// Copyright 2023 Citra Emulator Project
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -34,7 +34,8 @@ object PermissionsHandler {
context.contentResolver.releasePersistableUriPermission(uri, takeFlags)
} catch (e: Exception) {
Log.error("[PermissionsHandler]: Cannot check citra data directory permission, error: " + e.message)
// Do not use native library logging, as the native library may not be loaded yet
android.util.Log.e("PermissionsHandler", "Cannot check citra data directory permission, error: ${e.message}")
}
return false
}

View file

@ -17,12 +17,7 @@ object TurboHelper {
return turboSpeedEnabled
}
fun setTurboEnabled(state: Boolean) {
turboSpeedEnabled = state
reloadTurbo()
}
fun reloadTurbo() {
fun reloadTurbo(showToast: Boolean) {
val context = CitraApplication.appContext
val toastMessage: String
@ -34,6 +29,17 @@ object TurboHelper {
toastMessage = context.getString(R.string.turbo_disabled_toast)
}
Toast.makeText(context, toastMessage, Toast.LENGTH_SHORT).show()
if (showToast) {
Toast.makeText(context, toastMessage, Toast.LENGTH_SHORT).show()
}
}
fun setTurboEnabled(state: Boolean, showToast: Boolean) {
turboSpeedEnabled = state
reloadTurbo(showToast)
}
fun toggleTurbo(showToast: Boolean) {
setTurboEnabled(!TurboHelper.isTurboSpeedEnabled(), showToast)
}
}

View file

@ -142,6 +142,7 @@ void Config::ReadValues() {
ReadSetting("Renderer", Settings::values.async_presentation);
ReadSetting("Renderer", Settings::values.async_shader_compilation);
ReadSetting("Renderer", Settings::values.spirv_shader_gen);
ReadSetting("Renderer", Settings::values.disable_spirv_optimizer);
ReadSetting("Renderer", Settings::values.use_hw_shader);
ReadSetting("Renderer", Settings::values.use_shader_jit);
ReadSetting("Renderer", Settings::values.resolution_factor);
@ -197,10 +198,12 @@ void Config::ReadValues() {
ReadSetting("Layout", Settings::values.custom_bottom_x);
ReadSetting("Layout", Settings::values.custom_bottom_y);
ReadSetting("Layout", Settings::values.custom_bottom_width);
ReadSetting("Layout", Settings::values.aspect_ratio);
ReadSetting("Layout", Settings::values.custom_bottom_height);
ReadSetting("Layout", Settings::values.cardboard_screen_size);
ReadSetting("Layout", Settings::values.cardboard_x_shift);
ReadSetting("Layout", Settings::values.cardboard_y_shift);
ReadSetting("Layout", Settings::values.upright_screen);
Settings::values.portrait_layout_option =
static_cast<Settings::PortraitLayoutOption>(sdl2_config->GetInteger(
@ -292,6 +295,7 @@ void Config::ReadValues() {
ReadSetting("Debugging", Settings::values.use_gdbstub);
ReadSetting("Debugging", Settings::values.gdbstub_port);
ReadSetting("Debugging", Settings::values.instant_debug_log);
ReadSetting("Debugging", Settings::values.enable_rpc_server);
for (const auto& service_module : Service::service_module_map) {
bool use_lle = sdl2_config->GetBoolean("Debugging", "LLE\\" + service_module.name, false);

View file

@ -113,6 +113,10 @@ async_shader_compilation =
# 0: GLSL, 1: SPIR-V (default)
spirv_shader_gen =
# Whether to disable the SPIRV optimizer. Disabling it reduces stutter, but may slightly worsen performance
# 0: Enabled, 1: Disabled (default)
disable_spirv_optimizer =
# Whether to use hardware shaders to emulate 3DS shaders
# 0: Software, 1 (default): Hardware
use_hw_shader =
@ -206,6 +210,15 @@ disable_right_eye_render =
# 5: Custom Layout
layout_option =
# Position of the performance overlay
# 0: Top Left
# 1: Center Top
# 2: Top Right
# 3: Bottom Left
# 4: Center Bottom
# 5: Bottom Right
performance_overlay_position =
# Screen Gap - adds a gap between screens in all two-screen modes
# Measured in pixels relative to the 240px default height of the screens
# Scales with the larger screen (so 24 is 10% of the larger screen height)
@ -436,6 +449,10 @@ gdbstub_port=24689
# Immediately commits the debug log to file. Use this if Azahar crashes and the log output is being cut.
instant_debug_log =
# Enable RPC server for scripting purposes. Allows accessing guest memory remotely.
# 0 (default): Off, 1: On
enable_rpc_server =
# Delay the start of apps when LLE modules are enabled
# 0: Off, 1 (default): On
delay_start_for_lle_modules =

View file

@ -644,16 +644,19 @@ void Java_org_citra_citra_1emu_NativeLibrary_reloadSettings([[maybe_unused]] JNI
jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_getPerfStats(JNIEnv* env,
[[maybe_unused]] jobject obj) {
auto& core = Core::System::GetInstance();
jdoubleArray j_stats = env->NewDoubleArray(4);
jdoubleArray j_stats = env->NewDoubleArray(9);
if (core.IsPoweredOn()) {
auto results = core.GetAndResetPerfStats();
// Converting the structure into an array makes it easier to pass it to the frontend
double stats[4] = {results.system_fps, results.game_fps, results.frametime,
results.emulation_speed};
double stats[9] = {results.system_fps, results.game_fps,
results.emulation_speed, results.time_vblank_interval,
results.time_hle_svc, results.time_hle_ipc,
results.time_gpu, results.time_swap,
results.time_remaining};
env->SetDoubleArrayRegion(j_stats, 0, 4, stats);
env->SetDoubleArrayRegion(j_stats, 0, 9, stats);
}
return j_stats;

View file

@ -1,11 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="1dp"
android:height="1dp" />
<solid android:color="@color/citra_outlineVariant" />
</shape>

View file

@ -3,7 +3,7 @@
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M370,880L354,752Q341,747 329.5,740Q318,733 307,725L188,775L78,585L181,507Q180,500 180,493.5Q180,487 180,480Q180,473 180,466.5Q180,460 181,453L78,375L188,185L307,235Q318,227 330,220Q342,213 354,208L370,80L590,80L606,208Q619,213 630.5,220Q642,227 653,235L772,185L882,375L779,453Q780,460 780,466.5Q780,473 780,480Q780,487 780,493.5Q780,500 778,507L881,585L771,775L653,725Q642,733 630,740Q618,747 606,752L590,880L370,880ZM482,620Q540,620 581,579Q622,538 622,480Q622,422 581,381Q540,340 482,340Q423,340 382.5,381Q342,422 342,480Q342,538 382.5,579Q423,620 482,620Z"/>
<path
android:fillColor="@android:color/white"
android:pathData="M370,880L354,752Q341,747 329.5,740Q318,733 307,725L188,775L78,585L181,507Q180,500 180,493.5Q180,487 180,480Q180,473 180,466.5Q180,460 181,453L78,375L188,185L307,235Q318,227 330,220Q342,213 354,208L370,80L590,80L606,208Q619,213 630.5,220Q642,227 653,235L772,185L882,375L779,453Q780,460 780,466.5Q780,473 780,480Q780,487 780,493.5Q780,500 778,507L881,585L771,775L653,725Q642,733 630,740Q618,747 606,752L590,880L370,880ZM482,620Q540,620 581,579Q622,538 622,480Q622,422 581,381Q540,340 482,340Q423,340 382.5,381Q342,422 342,480Q342,538 382.5,579Q423,620 482,620Z"/>
</vector>

View file

@ -3,7 +3,7 @@
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M160,840q-33,0 -56.5,-23.5T80,760v-560q0,-33 23.5,-56.5T160,120h560q33,0 56.5,23.5T800,200v80h80v80h-80v80h80v80h-80v80h80v80h-80v80q0,33 -23.5,56.5T720,840L160,840ZM160,760h560v-560L160,200v560ZM240,680h200v-160L240,520v160ZM480,400h160v-120L480,280v120ZM240,480h200v-200L240,280v200ZM480,680h160v-240L480,440v240ZM160,200v560,-560Z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M160,840q-33,0 -56.5,-23.5T80,760v-560q0,-33 23.5,-56.5T160,120h560q33,0 56.5,23.5T800,200v80h80v80h-80v80h80v80h-80v80h80v80h-80v80q0,33 -23.5,56.5T720,840L160,840ZM160,760h560v-560L160,200v560ZM240,680h200v-160L240,520v160ZM480,400h160v-120L480,280v120ZM240,480h200v-200L240,280v200ZM480,680h160v-240L480,440v240ZM160,200v560,-560Z"/>
</vector>

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M12,1L3,5v6c0,5.55 3.84,10.74 9,12 5.16,-1.26 9,-6.45 9,-12V5l-9,-4zM12,11.99h7c-0.53,4.12 -3.28,7.79 -7,8.94V12H5V6.3l7,-3.11v8.8z"/>
</vector>

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:toDegrees="0"

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:pathData="M16,18l2.29,-2.29 -4.88,-4.88 -4,4L2,7.41 3.41,6l6,6 4,-4 6.3,6.29L22,12v6z"/>
<path
android:fillColor="#FFFFFF"
android:pathData="M12,2L8,6h4v3h2V6h4L12,2z"/>
</vector>

View file

@ -2,9 +2,8 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M280,920Q247,920 223.5,896.5Q200,873 200,840L200,120Q200,87 223.5,63.5Q247,40 280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,280L680,280L680,240L280,240L280,720L680,720L680,680L760,680L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM686,520L480,520Q480,520 480,520Q480,520 480,520L480,640L400,640L400,520Q400,487 423.5,463.5Q447,440 480,440L686,440L624,376L680,320L840,480L680,640L624,584L686,520Z"/>
android:viewportHeight="960">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M280,920Q247,920 223.5,896.5Q200,873 200,840L200,120Q200,87 223.5,63.5Q247,40 280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,280L680,280L680,240L280,240L280,720L680,720L680,680L760,680L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM686,520L480,520Q480,520 480,520Q480,520 480,520L480,640L400,640L400,520Q400,487 423.5,463.5Q447,440 480,440L686,440L624,376L680,320L840,480L680,640L624,584L686,520Z"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M19.88,18.47c0.44,-0.7 0.7,-1.51 0.7,-2.39c0,-2.49 -2.01,-4.5 -4.5,-4.5s-4.5,2.01 -4.5,4.5s2.01,4.5 4.49,4.5c0.88,0 1.7,-0.26 2.39,-0.7L21.58,23L23,21.58L19.88,18.47zM16.08,18.58c-1.38,0 -2.5,-1.12 -2.5,-2.5c0,-1.38 1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5C18.58,17.46 17.46,18.58 16.08,18.58zM15.72,10.08c-0.74,0.02 -1.45,0.18 -2.1,0.45l-0.55,-0.83l-3.8,6.18l-3.01,-3.52l-3.63,5.81L1,17l5,-8l3,3.5L13,6C13,6 15.72,10.08 15.72,10.08zM18.31,10.58c-0.64,-0.28 -1.33,-0.45 -2.05,-0.49c0,0 5.12,-8.09 5.12,-8.09L23,3.18L18.31,10.58z"/>
</vector>

View file

@ -3,7 +3,7 @@
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M320,960q-17,0 -28.5,-11.5T280,920q0,-17 11.5,-28.5T320,880q17,0 28.5,11.5T360,920q0,17 -11.5,28.5T320,960ZM480,960q-17,0 -28.5,-11.5T440,920q0,-17 11.5,-28.5T480,880q17,0 28.5,11.5T520,920q0,17 -11.5,28.5T480,960ZM640,960q-17,0 -28.5,-11.5T600,920q0,-17 11.5,-28.5T640,880q17,0 28.5,11.5T680,920q0,17 -11.5,28.5T640,960ZM320,800q-33,0 -56.5,-23.5T240,720v-640q0,-33 23.5,-56.5T320,0h320q33,0 56.5,23.5T720,80v640q0,33 -23.5,56.5T640,800L320,800ZM320,720h320v-40L320,680v40ZM320,600h320v-400L320,200v400ZM320,120h320v-40L320,80v40ZM320,120v-40,40ZM320,720v-40,40Z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M320,960q-17,0 -28.5,-11.5T280,920q0,-17 11.5,-28.5T320,880q17,0 28.5,11.5T360,920q0,17 -11.5,28.5T320,960ZM480,960q-17,0 -28.5,-11.5T440,920q0,-17 11.5,-28.5T480,880q17,0 28.5,11.5T520,920q0,17 -11.5,28.5T480,960ZM640,960q-17,0 -28.5,-11.5T600,920q0,-17 11.5,-28.5T640,880q17,0 28.5,11.5T680,920q0,17 -11.5,28.5T640,960ZM320,800q-33,0 -56.5,-23.5T240,720v-640q0,-33 23.5,-56.5T320,0h320q33,0 56.5,23.5T720,80v640q0,33 -23.5,56.5T640,800L320,800ZM320,720h320v-40L320,680v40ZM320,600h320v-400L320,200v400ZM320,120h320v-40L320,80v40ZM320,120v-40,40ZM320,720v-40,40Z"/>
</vector>

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_controller_outline" android:state_checked="false"/>
<item android:drawable="@drawable/ic_controller" android:state_checked="true"/>

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_settings_outline" android:state_checked="false"/>
<item android:drawable="@drawable/ic_settings" android:state_checked="true"/>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@android:color/black"/>
<corners android:radius="21dp"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/black"/>
<corners android:radius="21dp"/>
</shape>
</item>
</selector>

View file

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/left_content"
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/right_content"
app:layout_constraintHorizontal_weight="2">
<ImageView
android:id="@+id/icon"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="32dp"
app:layout_constraintBottom_toTopOf="@+id/text_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_max="160dp"
app:layout_constraintHeight_min="80dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_max="160dp"
app:layout_constraintWidth_min="80dp"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintVertical_weight="3"
tools:src="@drawable/ic_notification" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_title"
style="@style/TextAppearance.Material3.DisplaySmall"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textColor="?attr/colorOnSurface"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/text_description"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/icon"
tools:text="@string/welcome" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_description"
style="@style/TextAppearance.Material3.TitleLarge"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toTopOf="@+id/text_confirmation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_title"
app:lineHeight="30sp"
tools:text="@string/welcome_description" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_confirmation"
style="@style/TextAppearance.Material3.TitleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:text="@string/step_complete"
android:textAlignment="center"
android:textSize="30sp"
android:textStyle="bold"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_description"
app:lineHeight="30sp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/right_content"
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/left_content"
app:layout_constraintHorizontal_weight="1">
<LinearLayout
android:id="@+id/page_button_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/shortcut_icon"
android:layout_width="96dp"
android:layout_height="96dp"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
android:background="?attr/selectableItemBackgroundBorderless"
app:shapeAppearanceOverlay="@style/ShapeAppearance.Material3.Corner.Medium"/>
<ImageView
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_gravity="center"
android:src="@android:drawable/ic_menu_edit"
android:padding="8dp"
android:contentDescription="@string/edit_icon"
app:tint="?attr/colorAccent"
android:background="@drawable/shortcut_edit_background"
android:alpha="0.8"/>
</FrameLayout>
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/image_scale_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_gravity="center_horizontal"
android:enabled="false"
android:text="@string/shortcut_image_stretch_toggle"/>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/shortcut_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/shortcut_name_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>

View file

@ -117,7 +117,7 @@
</com.google.android.material.card.MaterialCardView>
<TextView
android:id="@+id/show_fps_text"
android:id="@+id/performance_overlay_show_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"

View file

@ -0,0 +1,8 @@
<com.google.android.material.button.MaterialButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="170dp"
android:layout_height="55dp"
android:layout_marginBottom="16dp"
app:iconTint="?attr/colorOnPrimary"
app:iconSize="24dp"
style="@style/Widget.Material3.Button.UnelevatedButton" />

View file

@ -11,7 +11,6 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="64dp"
android:layout_marginBottom="32dp"
app:layout_constraintBottom_toTopOf="@+id/text_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_max="220dp"
@ -43,11 +42,11 @@
android:id="@+id/text_description"
style="@style/TextAppearance.Material3.TitleLarge"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_height="78dp"
android:textAlignment="center"
android:textSize="20sp"
android:paddingHorizontal="16dp"
app:layout_constraintBottom_toTopOf="@+id/button_action"
app:layout_constraintBottom_toTopOf="@+id/text_confirmation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_title"
@ -58,15 +57,15 @@
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_confirmation"
style="@style/TextAppearance.Material3.TitleLarge"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_width="213dp"
android:layout_height="226dp"
android:paddingHorizontal="16dp"
android:paddingTop="24dp"
android:text="@string/step_complete"
android:textAlignment="center"
android:textSize="30sp"
android:visibility="invisible"
android:text="@string/step_complete"
android:textStyle="bold"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@ -74,19 +73,16 @@
app:layout_constraintVertical_weight="1"
app:lineHeight="30sp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_action"
android:layout_width="wrap_content"
android:layout_height="56dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="48dp"
android:textSize="20sp"
app:iconGravity="end"
app:iconSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
<LinearLayout
android:id="@+id/page_button_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center"
app:layout_constraintTop_toBottomOf="@+id/text_description"
tools:text="Get started" />
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -35,9 +35,13 @@
<item
android:id="@+id/menu_swap_screens"
android:icon="@drawable/ic_splitscreen"
android:title="@string/emulation_swap_screens" />
<item
android:id="@+id/menu_rotate_upright"
android:icon="@drawable/ic_rotate_up_right"
android:title="@string/emulation_rotate_upright" />
<item
android:id="@+id/menu_lock_drawer"
android:icon="@drawable/ic_unlocked"

View file

@ -3,12 +3,12 @@
<item
android:id="@+id/menu_show_overlay"
android:title="@string/emulation_show_overlay"
android:title="@string/emulation_show_controller_overlay"
android:checkable="true" />
<item
android:id="@+id/menu_show_fps"
android:title="@string/emulation_show_fps"
android:id="@+id/menu_performance_overlay_show"
android:title="@string/performance_overlay_show"
android:checkable="true" />
<item

View file

@ -74,6 +74,10 @@
<string name="permission_denied">Permís denegat</string>
<string name="add_games_warning">Vols saltar la selecció de la carpeta d\'aplicacions?</string>
<string name="add_games_warning_description">El software no es mostrarà a la llista d\'aplicacions si no se selecciona cap carpeta.</string>
<string name="permissions">Permisos</string>
<string name="select_emulator_data_folders">Carpetes de dades</string>
<string name="select_emulator_data_folders_description"><![CDATA[Seleccionar carpetes de dades<br/>(Es requerix la carpeta d\'usuari)]]></string>
<string name="permissions_description">Concedix permisos opcionals per a usar funcions específiques de l\'emulador</string>
<string name="warning_help">Ajuda</string>
<string name="warning_skip">Saltar</string>
<string name="warning_cancel">Cancel·lar</string>
@ -83,7 +87,7 @@
<string name="keep_current_azahar_directory">Mantindre el directori Azahar actual</string>
<string name="use_prior_lime3ds_directory">Usar el directori de Lime3DS anterior</string>
<string name="select">Seleccionar</string>
<string name="cannot_skip">No pots saltar aquest pas</string>
<string name="cannot_skip">No pots saltar la configuració de la carpeta d\'usuari</string>
<string name="cannot_skip_directory_description">Aquest pas és necessari perquè Azahar funcione. Selecciona un directori i després podràs continuar.</string>
<string name="selecting_user_directory_without_write_permissions">Has perdut els permisos d\'escriptura en el teu <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">directori de dades d\'usuari</a>, on es guarden les partides guardades i altra informació. Això pot ocórrer després d\'algunes actualitzacions d\'aplicacions o d\'Android. Torna a seleccionar el directori per a recuperar els permisos i poder continuar.</string>
<string name="set_up_theme_settings">Configuració de tema</string>
@ -208,6 +212,8 @@
<string name="graphics_api">API gràfica</string>
<string name="spirv_shader_gen">Activar Generació de Ombrejats SPIR-V</string>
<string name="spirv_shader_gen_description">Usa SPIR-V en vez de GLSL per a emetre el fragment de ombrejador utilitzat per a emular PICA.</string>
<string name="disable_spirv_optimizer">Desativar l\'optimitzador SPIR-V</string>
<string name="disable_spirv_optimizer_description">Desactiva la passada d\'optimització SPIR-V reduint considerablement el quequeig i afectant poc el rendiment.</string>
<string name="async_shaders">Activar compilació de ombrejadors asíncrona</string>
<string name="async_shaders_description">Compila els ombrejats en segón pla per a reduir les aturades durant la partida.
S\'esperen errors gràfics temporals quan estigue activat.</string>
@ -298,14 +304,24 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<string name="delay_start_lle_modules_description">Retarda l\'inici de l\'aplicació quan els mòduls LLE estan habilitats.</string>
<string name="deterministic_async_operations">Operacions asíncrones deterministes</string>
<string name="deterministic_async_operations_description">Fa que les operacions asíncrones siguen deterministes per a la depuració. Habilitar esta opció pot causar bloquejos.</string>
<string name="enable_rpc_server">Activar Servidor RPC</string>
<string name="enable_rpc_server_desc">Activa el servidor RPC en el port 45987. Això permet llegir/escriure de manera remota la memòria emulada.</string>
<string name="shader_jit">Activar Ombreig JIT</string>
<string name="shader_jit_description">Usar el motor JIT en lloc de l\'intèrpret per a l\'emulació del ombrejador de software.</string>
<!-- Layout settings strings -->
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Orientació de pantalla</string>
<string name="layout_screen_orientation_auto_sensor">Automàtica</string>
<string name="layout_screen_orientation_landscape">Horitzontal</string>
<string name="layout_screen_orientation_landscape_reverse">Horitzontal invertida</string>
<string name="layout_screen_orientation_portrait">Vertical</string>
<string name="layout_screen_orientation_portrait_reverse">Vertical invertida</string>
<string name="aspect_ratio_default">Per omissió</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Allargar</string>
<!-- Miscellaneous -->
<string name="clear">Reiniciar</string>
@ -342,6 +358,8 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<string name="cancelling">Cancel·lant</string>
<string name="important">Important</string>
<string name="dont_show_again">No tornar a mostrar</string>
<string name="visibility">Visibilitat</string>
<string name="information">Informació</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Seleccionar Directori de Joc</string>
@ -389,6 +407,7 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<string name="emulation_control_dpad_slide_enable">Lliscament de la Creuera</string>
<string name="emulation_open_settings">Obrir Configuraciò</string>
<string name="emulation_open_cheats">Obrir Trucs</string>
<string name="emulation_aspect_ratio">Relació d\'Aspecte</string>
<string name="emulation_switch_screen_layout">Estil de Pantalla Apaïsada</string>
<string name="emulation_switch_portrait_layout">Estil de Pantalla de Perfil</string>
<string name="emulation_screen_layout_largescreen">Pantalla amplia</string>
@ -424,8 +443,9 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<string name="emulation_custom_layout_height">Alt</string>
<string name="emulation_cycle_landscape_layouts">Alternar estils</string>
<string name="emulation_swap_screens">Intercanviar Pantalles</string>
<string name="emulation_rotate_upright">Girar pantalla en vertical</string>
<string name="emulation_touch_overlay_reset">Reiniciar Estil</string>
<string name="emulation_show_overlay">Mostrar Estil</string>
<string name="emulation_show_controller_overlay">Mostrar superposició de controls</string>
<string name="emulation_close_game">Tancar Joc</string>
<string name="emulation_toggle_pause">Activar pausa</string>
<string name="miscellaneous">Miscel·lanis</string>
@ -501,7 +521,6 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<!-- About Game Dialog -->
<string name="play">Jugar</string>
<string name="shortcut">Drecera</string>
<string name="uninstall_cia">Desinstal·lar Aplicació</string>
<string name="uninstalling">Desinstal·lant...</string>
<string name="game_context_open_save_dir">Obrir Carpeta de Guardat</string>
@ -513,6 +532,40 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<string name="game_context_open_extra">Obrir Carpeta Extra</string>
<string name="game_context_uninstall_dlc">Desinstal·lar DLC</string>
<string name="game_context_uninstall_updates">Desinstal·lar Actualitzacions</string>
<string name="shortcut">Drecera</string>
<string name="shortcut_name">Nom de la drecera</string>
<string name="edit_icon">Editar icona</string>
<string name="create_shortcut">Crear drecera</string>
<string name="shortcut_name_empty">El nom de la drecera no pot estar buit</string>
<string name="shortcut_image_stretch_toggle">Allargar per a ajustar la imatge</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">Mostrar informació de rendiment</string>
<string name="performance_overlay_options">Informació de rendiment</string>
<string name="performance_overlay_enable">Activar informació de rendiment</string>
<string name="performance_overlay_options_description">Configura la informació de rendiment</string>
<string name="overlay_show_fps">Mostrar FPS</string>
<string name="overlay_show_fps_description">Mostra els fotogrames per segon actuals.</string>
<string name="overlay_show_frametime">Mostrar duració de fotogrames</string>
<string name="overlay_show_frametime_description">Mostra la duració actual de cada fotograma.</string>
<string name="overlay_show_speed">Mostrar velocitat</string>
<string name="overlay_show_speed_description">Mostra el percentatge de velocitat d\'emulació actual.</string>
<string name="overlay_show_app_ram_usage">Mostrar l\'ús de memòria de l\'aplicació</string>
<string name="overlay_show_app_ram_usage_description">Mostra la quantitat de memòria RAM que esta usant l\'emulador.</string>
<string name="overlay_show_available_ram">Mostrar memòria disponible</string>
<string name="overlay_show_available_ram_description">Mostra la quantitat de memòria RAM que esta disponible.</string>
<string name="overlay_show_battery_temp">Mostrar la temperatura de la bateria</string>
<string name="overlay_show_battery_temp_description">Mostra la temperatura actual de la bateria en Celsius i Fahrenheit.</string>
<string name="overlay_position">Posició de la informació</string>
<string name="overlay_position_description">Tria on la informació de rendiment serà mostrada en la pantalla.</string>
<string name="overlay_position_top_left">Dalt a l\'esquerra</string>
<string name="overlay_position_top_right">Dalt a la dreta</string>
<string name="overlay_position_bottom_left">Avall a l\'esquerra</string>
<string name="overlay_position_bottom_right">Avall a la dreta</string>
<string name="overlay_position_center_top">Dalt al centre</string>
<string name="overlay_position_center_bottom">Avall al centre</string>
<string name="overlay_background">Fons de la informació</string>
<string name="overlay_background_description">Agrega un fons darrere de la informació per a fer-la més llegible.</string>
<!-- Cheats -->
<string name="cheats">Trucs</string>

View file

@ -83,7 +83,6 @@
<string name="keep_current_azahar_directory">Behold den aktuelle Azahar-mappe</string>
<string name="use_prior_lime3ds_directory">Brug tidligere Lime3DS mappe</string>
<string name="select">Vælg</string>
<string name="cannot_skip">Du kan ikke springe dette trin over</string>
<string name="cannot_skip_directory_description">Dette trin er påkrævet for at Azahar kan fungere. Vælg en mappe og så kan du fortsætte.</string>
<string name="selecting_user_directory_without_write_permissions">Du har mistet skrivetilladelse i din <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">brugerdata</a> mappe, hvor gemte tilstande og anden information er gemt. Dette kan ske efter en app- eller Android-opdatering. Vælg venligst mappen for at give tilladelse igen, så du kan fortsætte.</string>
<string name="set_up_theme_settings">Temaindstillinger</string>
@ -125,6 +124,10 @@
<string name="button_turbo">Turbo</string>
<string name="input_message_analog_only">Denne kontrol skal være bundet til et gamepad analogt greb eller akse D-Pad!</string>
<string name="input_message_button_only">Denne kontrol skal være bundet til en gamepad knap!</string>
<string name="turbo_limit_hotkey">Turbohastighed</string>
<string name="turbo_enabled_toast">Turbohastighed aktiveret</string>
<string name="turbo_disabled_toast">Turbohastighed deaktiveret</string>
<!-- System files strings -->
<string name="setup_system_files">Systemfiler</string>
<string name="setup_system_files_description">Udfør handlinger som installation af systemfiler eller opstart af startmenu</string>
@ -212,7 +215,6 @@
<string name="texture_filter_description">Forbedrer det visuelle i applikationer ved at anvende et filter på teksturer. De understøttede filtre er Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale og MMPX.</string>
<string name="delay_render_thread">Forsinket spillets renderingstråd</string>
<string name="delay_render_thread_description">Forsink spillets remderingstråd, når den sender data til GPU\'en. Hjælper med ydeevneproblemer i de (meget få) applikationer med dynamiske framerates.</string>
<string name="advanced">Avanceret\"</string>
<string name="texture_sampling_name">Tekstur sampling</string>
<string name="texture_sampling_description">Tilsidesætter det samplingsfilter, der bruges af spillene. Dette kan i nogle tilfælde være nyttigt for spil, der ikke håndterer opskalering godt. Hvis du er usikker, skal du indstille dette til Styret af spillene.</string>
<string name="shaders_accurate_mul">Nøjagtig multiplikation</string>
@ -223,6 +225,8 @@
<string name="frame_limit_enable_description">Når aktiveret, vil emuleringshastigheden være begrænset til en specificeret procentdel af normal hastighed. Hvis deaktiveret, vil emuleringshastigheden være ubegrænset, og genvejstasten for turbohastighed vil ikke fungere.</string>
<string name="frame_limit_slider">Begræns hastighedsprocent</string>
<string name="frame_limit_slider_description">Angiver procentdelen emuleringshastigheden skal begrænses til. Med standardværdien på 100% vil emulering være begrænset til normal hastighed. Værdier højere eller lavere vil øge eller mindske hastighedsgrænsen.</string>
<string name="turbo_limit">Turbohastighedsgrænse</string>
<string name="turbo_limit_description">Grænse for emuleringens hastighed bruges, når turbo-genvejstasten er aktiv.</string>
<string name="expand_to_cutout_area">Anvend området ved frontkamera</string>
<string name="expand_to_cutout_area_description">Udvider visningsområdet til at omfatte området ved frontkameraet (eller indhakket).</string>
<string name="internal_resolution">Intern opløsning</string>
@ -291,7 +295,8 @@
<string name="delay_start_lle_modules_description">Forsinker starten af appen, når LLE moduler er aktiveret.</string>
<string name="deterministic_async_operations">Deterministiske asynkrone operationer</string>
<string name="deterministic_async_operations_description">Gør asynkrone operationer deterministiske for fejlretning. Aktivering af dette kan forårsage at programmet fryser fast.</string>
<string name="enable_rpc_server">Aktivér RPC-server</string>
<string name="enable_rpc_server_desc">Aktiverer RPC-serveren på port 45987. Dette tillader fjernlæsning/skrivning af gæstehukommelse.</string>
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Skærmorientering</string>
<string name="layout_screen_orientation_auto_sensor">Automatisk</string>
@ -299,6 +304,12 @@
<string name="layout_screen_orientation_landscape_reverse">Omvendt landskab</string>
<string name="layout_screen_orientation_portrait">Portræt</string>
<string name="layout_screen_orientation_portrait_reverse">Omvendt portræt</string>
<string name="aspect_ratio_default">Standard</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Strække</string>
<!-- Miscellaneous -->
<string name="clear">Ryd</string>
@ -335,6 +346,8 @@
<string name="cancelling">Annullerer...</string>
<string name="important">Vigtig</string>
<string name="dont_show_again">Vis ikke igen</string>
<string name="visibility">Sigtbarhed</string>
<string name="information">Information</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Vælg spilmappe</string>
@ -382,6 +395,7 @@
<string name="emulation_control_dpad_slide_enable">D-Pad glidning</string>
<string name="emulation_open_settings">Åbn Indstillinger</string>
<string name="emulation_open_cheats">Åbn snydekoder</string>
<string name="emulation_aspect_ratio">Billedformat</string>
<string name="emulation_switch_screen_layout">Landskab skærmlayout</string>
<string name="emulation_switch_portrait_layout">Portræt skærmlayout</string>
<string name="emulation_screen_layout_largescreen">Stor skærm</string>
@ -418,7 +432,7 @@
<string name="emulation_cycle_landscape_layouts">Skift layout</string>
<string name="emulation_swap_screens">Byt skærme</string>
<string name="emulation_touch_overlay_reset">Nulstil overlejring</string>
<string name="emulation_show_overlay">Vis overlejring</string>
<string name="emulation_show_controller_overlay">Vis controller-overlejring</string>
<string name="emulation_close_game">Luk spil</string>
<string name="emulation_toggle_pause">Slå Pause til/fra</string>
<string name="miscellaneous">Diverse</string>
@ -494,7 +508,6 @@
<!-- About Game Dialog -->
<string name="play">Spil</string>
<string name="shortcut">Genvej</string>
<string name="uninstall_cia">Afinstaller applikation</string>
<string name="uninstalling">Afinstallerer...</string>
<string name="game_context_open_save_dir">Åbn mappen med gemt data</string>
@ -506,6 +519,34 @@
<string name="game_context_open_extra">Åbn mappen med ekstra</string>
<string name="game_context_uninstall_dlc">Afinstaller DLC</string>
<string name="game_context_uninstall_updates">Afinstaller opdateringer</string>
<string name="shortcut">Genvej</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">Vis ydelsesoverlejring</string>
<string name="performance_overlay_options">Ydelsesoverlejring</string>
<string name="performance_overlay_enable">Aktivér ydelsesoverlejring</string>
<string name="performance_overlay_options_description">Konfigurer, om ydelsesoverlejringen skal vises, og hvilke oplysninger der vises.</string>
<string name="overlay_show_fps">Vis FPS</string>
<string name="overlay_show_fps_description">Vis aktuelle billeder pr. sekund.</string>
<string name="overlay_show_frametime">Vis billedtid</string>
<string name="overlay_show_frametime_description">Vis aktuel billedtid.</string>
<string name="overlay_show_speed">Vis hastighed</string>
<string name="overlay_show_speed_description">Vis den aktuelle emuleringshastighed i procent.</string>
<string name="overlay_show_app_ram_usage">Vis hukommelsesforbrug for app</string>
<string name="overlay_show_app_ram_usage_description">Vis mængden af RAM, der bruges af emulatoren.</string>
<string name="overlay_show_available_ram">Vis tilgængelig hukommelse</string>
<string name="overlay_show_available_ram_description">Vis mængden af RAM, der er tilgængelig.</string>
<string name="overlay_show_battery_temp">Vis batteritemperatur</string>
<string name="overlay_show_battery_temp_description">Viser den aktuelle batteritemperatur i Celsius og Fahrenheit.</string>
<string name="overlay_position">Position af overlejring</string>
<string name="overlay_position_description">Vælg, hvor ydelsesoverlejringen skal vises på skærmen.</string>
<string name="overlay_position_top_left">Øverst til venstre</string>
<string name="overlay_position_top_right">Øverst til højre</string>
<string name="overlay_position_bottom_left">Nederst til venstre</string>
<string name="overlay_position_bottom_right">Nederst til højre</string>
<string name="overlay_position_center_top">Midten øverst</string>
<string name="overlay_position_center_bottom">Midten nederst</string>
<string name="overlay_background">Overlejret baggrund</string>
<string name="overlay_background_description">Tilføjer en baggrund bag overlejringen for lettere læsning.</string>
<!-- Cheats -->
<string name="cheats">Snyd</string>

View file

@ -74,6 +74,10 @@
<string name="permission_denied">Permiso denegado</string>
<string name="add_games_warning">¿Saltarse la selección de la carpeta de aplicaciones?</string>
<string name="add_games_warning_description">Nada se mostrará en la lista de aplicaciones si no se selecciona una carpeta.</string>
<string name="permissions">Permisos</string>
<string name="select_emulator_data_folders">Carpetas de datos</string>
<string name="select_emulator_data_folders_description"><![CDATA[Seleccionar carpetas de datos<br/>(Carpeta de usuario es necesaria)]]></string>
<string name="permissions_description">Concede permisos opcionales para usar funciones específicas del emulador</string>
<string name="warning_help">Ayuda</string>
<string name="warning_skip">Saltar</string>
<string name="warning_cancel">Cancelar</string>
@ -83,7 +87,7 @@
<string name="keep_current_azahar_directory">Mantener el directorio Azahar actual</string>
<string name="use_prior_lime3ds_directory">Usar el directorio de Lime3DS anterior</string>
<string name="select">Seleccionar</string>
<string name="cannot_skip">No puedes saltarte este paso</string>
<string name="cannot_skip">No puedes saltarte el configuración de la carpeta de usuario</string>
<string name="cannot_skip_directory_description">Este paso es necesario para permitir que Azahar funcione. Por favor, seleccione un directorio y luego puede continuar.</string>
<string name="selecting_user_directory_without_write_permissions">Has perdido los permisos de escritura en tu <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">directorio de datos de usuario</a>, donde se guardan las partidas guardadas y otra información. Esto puede ocurrir después de algunas actualizaciones de aplicaciones o de Android. Vuelve a seleccionar el directorio para recuperar los permisos y poder continuar.</string>
<string name="set_up_theme_settings">Configuración de tema</string>
@ -208,6 +212,8 @@
<string name="graphics_api">API gráfica</string>
<string name="spirv_shader_gen">Activar Generación de Sombreados SPIR-V</string>
<string name="spirv_shader_gen_description">Usa SPIR-V en vez de GLSL para emitir el fragmento de sombreador usado para emular PICA.</string>
<string name="disable_spirv_optimizer">Desactivar el optimizador SPIR-V</string>
<string name="disable_spirv_optimizer_description">Desactiva el pase de optimización SPIR-V reduciendo considerablemente el tartamudeo sin afectar apenas el rendimiento.</string>
<string name="async_shaders">Activar compilación de sombreados asíncrona</string>
<string name="async_shaders_description">Compila los sombreados en el fondo para reducir los parones durante la partida.
Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
@ -298,14 +304,24 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<string name="delay_start_lle_modules_description">Retrasa el inicio de la aplicación cuando los módulos LLE están habilitados.</string>
<string name="deterministic_async_operations">Operaciones asíncronas deterministas</string>
<string name="deterministic_async_operations_description">Hace que las operaciones asíncronas sean deterministas para la depuración. Habilitar esta opción puede causar bloqueos.</string>
<string name="enable_rpc_server">Activar servidor RPC</string>
<string name="enable_rpc_server_desc">Activa el servidor RPC en el puerto 45987. Esto permite leer/escribir de manera remota la memoria emulada.</string>
<string name="shader_jit">Activar Sombreador JIT</string>
<string name="shader_jit_description">Usar el motor JIT en lugar del intérprete para la emulación del sombreador de software.</string>
<!-- Layout settings strings -->
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Orientación de pantalla</string>
<string name="layout_screen_orientation_auto_sensor">Automática</string>
<string name="layout_screen_orientation_landscape">Horizontal</string>
<string name="layout_screen_orientation_landscape_reverse">Horizontal invertida</string>
<string name="layout_screen_orientation_portrait">Retrato</string>
<string name="layout_screen_orientation_portrait_reverse">Retrato invertido</string>
<string name="aspect_ratio_default">Por defecto</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Alargar</string>
<!-- Miscellaneous -->
<string name="clear">Reiniciar</string>
@ -342,6 +358,8 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<string name="cancelling">Cancelando...</string>
<string name="important">Importante</string>
<string name="dont_show_again">No volver a mostrar</string>
<string name="visibility">Visibilidad</string>
<string name="information">Información</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Seleccionar Directorio de Juego</string>
@ -389,6 +407,7 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<string name="emulation_control_dpad_slide_enable">Deslizamiento de la Cruceta</string>
<string name="emulation_open_settings">Abrir Configuración</string>
<string name="emulation_open_cheats">Abrir Trucos</string>
<string name="emulation_aspect_ratio">Relación de Aspecto</string>
<string name="emulation_switch_screen_layout">Estilo de Pantalla Apaisada</string>
<string name="emulation_switch_portrait_layout">Estilo de Pantalla de Perfil</string>
<string name="emulation_screen_layout_largescreen">Pantalla amplia</string>
@ -424,8 +443,9 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<string name="emulation_custom_layout_height">Alto</string>
<string name="emulation_cycle_landscape_layouts">Alternar estilos</string>
<string name="emulation_swap_screens">Intercambiar Pantallas</string>
<string name="emulation_rotate_upright">Rotar pantalla en vertical</string>
<string name="emulation_touch_overlay_reset">Reiniciar Estilo</string>
<string name="emulation_show_overlay">Mostrar Estilo</string>
<string name="emulation_show_controller_overlay">Mostrar superposición de controles</string>
<string name="emulation_close_game">Cerrar Juego</string>
<string name="emulation_toggle_pause">Activar pausa</string>
<string name="miscellaneous">Misceláneos</string>
@ -501,7 +521,6 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<!-- About Game Dialog -->
<string name="play">Jugar</string>
<string name="shortcut">Atajo</string>
<string name="uninstall_cia">Desinstalar Aplicación</string>
<string name="uninstalling">Desinstalando...</string>
<string name="game_context_open_save_dir">Abrir Carpeta de Guardado</string>
@ -513,6 +532,40 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<string name="game_context_open_extra">Abrir Carpeta Extra</string>
<string name="game_context_uninstall_dlc">Desinstalar DLC</string>
<string name="game_context_uninstall_updates">Desinstalar Actualizaciones</string>
<string name="shortcut">Atajo</string>
<string name="shortcut_name">Nombre de Atajo</string>
<string name="edit_icon">Editar icono</string>
<string name="create_shortcut">Crear atajo</string>
<string name="shortcut_name_empty">El nombre del atajo no puede estar vacío</string>
<string name="shortcut_image_stretch_toggle">Alargar para ajustar la imagen</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">Mostrar información de rendimiento</string>
<string name="performance_overlay_options">Información de rendimiento</string>
<string name="performance_overlay_enable">Activar información de rendimiento</string>
<string name="performance_overlay_options_description">Configura la información de rendimiento</string>
<string name="overlay_show_fps">Mostrar FPS</string>
<string name="overlay_show_fps_description">Muestra los fotogramas por segundo actuales.</string>
<string name="overlay_show_frametime">Mostrar duración de fotogramas</string>
<string name="overlay_show_frametime_description">Muestra la duración actual de cada fotograma.</string>
<string name="overlay_show_speed">Mostrar velocidad</string>
<string name="overlay_show_speed_description">Muestra el porcentaje de velocidad de emulación actual.</string>
<string name="overlay_show_app_ram_usage">Mostrar el uso de memoria de la aplicación</string>
<string name="overlay_show_app_ram_usage_description">Muestra la cantidad de memoria RAM que esta usando el emulador.</string>
<string name="overlay_show_available_ram">Mostrar memoria disponible</string>
<string name="overlay_show_available_ram_description">Muestra la cantidad de memoria RAM que esta disponible.</string>
<string name="overlay_show_battery_temp">Mostrar la temperatura de la batería</string>
<string name="overlay_show_battery_temp_description">Muestra la temperatura actual de la batería en Celsius y Fahrenheit.</string>
<string name="overlay_position">Posición de la información</string>
<string name="overlay_position_description">Elige donde la información de rendimiento será mostrada en la pantalla.</string>
<string name="overlay_position_top_left">Arriba a la izquierda</string>
<string name="overlay_position_top_right">Arriba a la derecha</string>
<string name="overlay_position_bottom_left">Abajo a la izquierda</string>
<string name="overlay_position_bottom_right">Abajo a la derecha</string>
<string name="overlay_position_center_top">Centro superior</string>
<string name="overlay_position_center_bottom">Centro inferior </string>
<string name="overlay_background">Fondo de la información</string>
<string name="overlay_background_description">Agrega un fondo detrás de la información para hacerla más legible.</string>
<!-- Cheats -->
<string name="cheats">Trucos</string>

View file

@ -30,7 +30,6 @@
<string name="warning_cancel">Atšaukti</string>
<string name="select_citra_user_folder">Pasirinkti vartotojo aplanką</string>
<string name="select">Pasirinkti</string>
<string name="cannot_skip">Tu negali praleisti šio žingsnio</string>
<string name="search_recently_played">Nesenai žaista</string>
<string name="search_recently_added">Nesenai pridėta</string>
<string name="button_swap">Apkeisti ekranus</string>
@ -71,7 +70,6 @@
<string name="cancelling">Atšaukiama...</string>
<string name="important">Svarbu</string>
<string name="dont_show_again">Daugiau niekada nerodyti</string>
<!-- Preferences Screen -->
<string name="preferences_settings">Nustatymai</string>
<string name="preferences_system">Sistema</string>

View file

@ -74,6 +74,10 @@
<string name="permission_denied">Odmowa zezwolenia</string>
<string name="add_games_warning">Pominąć wybór folderu z aplikacjami?</string>
<string name="add_games_warning_description">Oprogramowania nie będą wyświetlane na liście aplikacji, jeśli nie wybrano folderu.</string>
<string name="permissions">Uprawnienia</string>
<string name="select_emulator_data_folders">Foldery dat</string>
<string name="select_emulator_data_folders_description"><![CDATA[Wybierz foldery danych<br/>(wymagany jest folder użytkownika)]]></string>
<string name="permissions_description">Przyznaj opcjonalne uprawnienia do korzystania z określonych funkcji emulatora.</string>
<string name="warning_help">Pomoc</string>
<string name="warning_skip">Pomiń</string>
<string name="warning_cancel">Anuluj</string>
@ -83,7 +87,7 @@
<string name="keep_current_azahar_directory">Zachowaj aktualny katalog Azahar</string>
<string name="use_prior_lime3ds_directory">Użyj wcześniejszego katalogu Lime3DS</string>
<string name="select">Wybierz</string>
<string name="cannot_skip">Nie możesz pominąć tego kroku</string>
<string name="cannot_skip">Nie można pominąć konfiguracji folderu użytkownika.</string>
<string name="cannot_skip_directory_description">Ten krok jest wymagany, aby umożliwić działanie Azahar. Wybierz katalog, a następnie możesz kontynuować.</string>
<string name="selecting_user_directory_without_write_permissions">Utraciłeś uprawnienia do zapisu w katalogu <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">danych użytkownika</a>, w którym przechowywane są zapisy i inne informacje. Może się to zdarzyć po niektórych aktualizacjach aplikacji lub systemu Android. Wybierz ponownie katalog, aby odzyskać uprawnienia i móc kontynuować.</string>
<string name="set_up_theme_settings">Ustawienia motywu</string>
@ -208,6 +212,8 @@
<string name="graphics_api">API grafik</string>
<string name="spirv_shader_gen">Włącz generowanie shaderów SPIR-V</string>
<string name="spirv_shader_gen_description">Emituje fragment shaderów używany do emulacji PICA przy użyciu SPIR-V zamiast GLSL.</string>
<string name="disable_spirv_optimizer">Wyłącz optymalizator SPIR-V</string>
<string name="disable_spirv_optimizer_description">Wyłącza optymalizację SPIR-V, znacznie zmniejszając zacinanie się obrazu przy minimalnym wpływie na wydajność.</string>
<string name="async_shaders">Włącz asynchroniczną kompilację shaderów</string>
<string name="async_shaders_description">Kompiluje shadery w tle, aby zmniejszyć zacinanie się podczas rozgrywki. Po włączeniu należy spodziewać się tymczasowych błędów graficznych</string>
<string name="linear_filtering">Filtrowanie Linear</string>
@ -216,7 +222,7 @@
<string name="texture_filter_description">Ulepsza oprawę wizualną aplikacji poprzez zastosowanie filtrów do tekstur. Obsługiwane filtry to Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale i MMPX.</string>
<string name="delay_render_thread">Opóźnienie renderowania wątku gry</string>
<string name="delay_render_thread_description">Opóźnia wątek renderowania aplikacji podczas przesyłania danych do GPU. Pomaga w kwestiach wydajności w (bardzo niewielu) aplikacjach z dynamiczną liczbą klatek na sekundę.</string>
<string name="advanced">Zaawansowane\"</string>
<string name="advanced">Zaawansowane</string>
<string name="texture_sampling_name">Próbkowanie tekstur</string>
<string name="texture_sampling_description">Zastępuje filtr próbkowania używany przez gry. Może to być przydatne w niektórych przypadkach, gdy gry źle zachowują się podczas skalowania w górę. Jeśli nie masz pewności, ustaw tę opcję na Kontrolowane przez grę.</string>
<string name="shaders_accurate_mul">Dokładne mnożenie</string>
@ -297,14 +303,24 @@
<string name="delay_start_lle_modules_description">Opóźnia uruchomienie aplikacji, gdy włączone są moduły LLE.</string>
<string name="deterministic_async_operations">Deterministyczne operacje asynchroniczne</string>
<string name="deterministic_async_operations_description">Sprawia, że operacje asynchroniczne są deterministyczne dla debugowania. Włączenie tej opcji może powodować zawieszanie się gry.</string>
<string name="enable_rpc_server">Włącz serwer RPC</string>
<string name="enable_rpc_server_desc">Włącza serwer RPC na porcie 45987. Pozwala to na zdalny odczyt/zapis pamięci gościa. Nie włączaj tej opcji, jeśli nie wiesz, co robisz.</string>
<string name="shader_jit">Aktywuj Shader JIT</string>
<string name="shader_jit_description">Używa silnika JIT zamiast interpretera do programowej emulacji shaderów.</string>
<!-- Layout settings strings -->
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Orientacja Ekranu</string>
<string name="layout_screen_orientation_auto_sensor">Automatycznie</string>
<string name="layout_screen_orientation_landscape">Widok</string>
<string name="layout_screen_orientation_landscape_reverse">Odwrócony widok</string>
<string name="layout_screen_orientation_portrait">Ekran</string>
<string name="layout_screen_orientation_portrait_reverse">Odwrócony Ekran</string>
<string name="aspect_ratio_default">Domyślny</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Rozciągliwość</string>
<!-- Miscellaneous -->
<string name="clear">Wyczyść</string>
@ -341,6 +357,8 @@
<string name="cancelling">Anulowanie...</string>
<string name="important">Ważne</string>
<string name="dont_show_again">Nie pokazuj tego ponownie</string>
<string name="visibility">Widoczność</string>
<string name="information">Informacje</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Wybierz folder gry</string>
@ -388,6 +406,7 @@
<string name="emulation_control_dpad_slide_enable">Przesuwanie Krzyżaka</string>
<string name="emulation_open_settings">Otwórz ustawienia</string>
<string name="emulation_open_cheats">Otwórz cheaty</string>
<string name="emulation_aspect_ratio">Proporcje obrazu</string>
<string name="emulation_switch_screen_layout">Geometryczny Układ Ekranu</string>
<string name="emulation_switch_portrait_layout">Pionowy Układ Ekranu</string>
<string name="emulation_screen_layout_largescreen">Duży Ekran</string>
@ -423,8 +442,9 @@
<string name="emulation_custom_layout_height">Wysokość</string>
<string name="emulation_cycle_landscape_layouts">Układy Cykli</string>
<string name="emulation_swap_screens">Zamień Ekrany</string>
<string name="emulation_rotate_upright">Obróć ekran w pozycji pionowej</string>
<string name="emulation_touch_overlay_reset">Zresetuj Nakładkę</string>
<string name="emulation_show_overlay">Pokaż Nakładkę</string>
<string name="emulation_show_controller_overlay">Wyświetl nakładkę kontrolera</string>
<string name="emulation_close_game">Zamknij Grę</string>
<string name="emulation_toggle_pause">Włącz Pauzę</string>
<string name="miscellaneous">Różne</string>
@ -500,7 +520,6 @@
<!-- About Game Dialog -->
<string name="play">Odtwórz</string>
<string name="shortcut">Skrót</string>
<string name="uninstall_cia">Odinstaluj aktualizacje</string>
<string name="uninstalling">Odinstalowywanie...</string>
<string name="game_context_open_save_dir">Otwórz folder zapisanych danych</string>
@ -512,6 +531,40 @@
<string name="game_context_open_extra">Otwórz folder Extra</string>
<string name="game_context_uninstall_dlc">Odinstaluj DLC</string>
<string name="game_context_uninstall_updates">Odinstaluj aktualizacje</string>
<string name="shortcut">Skrót</string>
<string name="shortcut_name">Nazwa skrótu</string>
<string name="edit_icon">Edytuj ikonę</string>
<string name="create_shortcut">Utwórz skrót</string>
<string name="shortcut_name_empty">Nazwa skrótu nie może być pusta</string>
<string name="shortcut_image_stretch_toggle">Rozciągnij, aby dopasować obraz</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">Wyświetl nakładkę wydajności</string>
<string name="performance_overlay_options">Nakładkę wydajności</string>
<string name="performance_overlay_enable">Włącz nakładkę wydajności</string>
<string name="performance_overlay_options_description">Konfiguruje, czy wyświetlana jest nakładka wydajności i jakie informacje są wyświetlane.</string>
<string name="overlay_show_fps">Wyświetl FPS</string>
<string name="overlay_show_fps_description">Wyświetla aktualną liczbę klatek na sekundę.</string>
<string name="overlay_show_frametime">Pokaż czas klatek</string>
<string name="overlay_show_frametime_description">Wyświetla bieżący czas klatek.</string>
<string name="overlay_show_speed">Wyświetl Prędkość</string>
<string name="overlay_show_speed_description">Wyświetla aktualną procentową prędkość emulacji.</string>
<string name="overlay_show_app_ram_usage">Wyświetl użycie pamięci aplikacji</string>
<string name="overlay_show_app_ram_usage_description">Wyświetla ilość pamięci RAM używanej przez emulator.</string>
<string name="overlay_show_available_ram">Wyświetl dostępną pamięć</string>
<string name="overlay_show_available_ram_description">Wyświetla ilość dostępnej pamięci RAM.</string>
<string name="overlay_show_battery_temp">Wyświetl temperaturę baterii</string>
<string name="overlay_show_battery_temp_description">Wyświetla bieżącą temperaturę baterii w stopniach Celcjusza i Fahrenheita.</string>
<string name="overlay_position">Pozycja nakładki</string>
<string name="overlay_position_description">Wybierz miejsce wyświetlania nakładki wydajności na ekranie.</string>
<string name="overlay_position_top_left">Lewy górny róg</string>
<string name="overlay_position_top_right">Prawy górny róg</string>
<string name="overlay_position_bottom_left">Lewy dolny róg</string>
<string name="overlay_position_bottom_right">Prawy dolny róg</string>
<string name="overlay_position_center_top">Środkowy górny</string>
<string name="overlay_position_center_bottom">Środkowy dolny</string>
<string name="overlay_background">Tło nakładki</string>
<string name="overlay_background_description">Dodaje tło z tyłu nakładki w celu łatwego odczytu.</string>
<!-- Cheats -->
<string name="cheats">Cheaty</string>

View file

@ -74,6 +74,9 @@
<string name="permission_denied">Permissão negada</string>
<string name="add_games_warning">Pular a seleção da pasta de aplicativos?</string>
<string name="add_games_warning_description">Os softwares não serão exibidos na lista de Aplicativos se uma pasta não for selecionada.</string>
<string name="permissions">Premissões</string>
<string name="select_emulator_data_folders">Pastas de Dados</string>
<string name="select_emulator_data_folders_description"><![CDATA[Selecione pastas de dados<br/>(Pasta de usuário é necessária)]]></string>
<string name="warning_help">Ajuda</string>
<string name="warning_skip">Pular</string>
<string name="warning_cancel">Cancelar</string>
@ -83,7 +86,6 @@
<string name="keep_current_azahar_directory">Manter diretório atual do Azahar</string>
<string name="use_prior_lime3ds_directory">Usar o diretório antigo do Lime3DS</string>
<string name="select">Selecionar</string>
<string name="cannot_skip">Você não pode pular esta etapa</string>
<string name="cannot_skip_directory_description">Este passo é necessário para permitir que o Azahar funcione. Selecione um diretório para continuar.</string>
<string name="selecting_user_directory_without_write_permissions">Você perdeu suas permissões de escrita no seu diretório de <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">dados de usuário</a>, onde dados salvos e outras informações são guardadas. Isso pode acontecer depois que algum app ou Android atualiza. Re-selecione o diretório para reobter as permissões para que você possa continuar.</string>
<string name="set_up_theme_settings">Configurações de Tema</string>
@ -125,6 +127,10 @@
<string name="button_turbo">Turbo</string>
<string name="input_message_analog_only">Este controle tem de ser mapeado a um eixo analógico do gamepad ou um eixo de D-pad!</string>
<string name="input_message_button_only">Este controle tem de ser mapeado a um botão do gamepad!</string>
<string name="turbo_limit_hotkey">Velocidade Turbo</string>
<string name="turbo_enabled_toast">Velocidade Turbo Ativada</string>
<string name="turbo_disabled_toast">Velocidade Turbo Desativada</string>
<!-- System files strings -->
<string name="setup_system_files">Arquivos do Sistema</string>
<string name="setup_system_files_description">Executar operações de arquivos do sistema, como instalar arquivos do sistema ou iniciar o Menu Principal.</string>
@ -211,7 +217,7 @@
<string name="texture_filter_description">Aprimora o visual dos aplicativos ao aplicar filtros às texturas. Os filtros compatíveis são: Anime4K Ultrafast, Bicúbico, ScaleForce, xBRZ Freescale e MMPX.</string>
<string name="delay_render_thread">Atrasar thread de renderização do aplicativo</string>
<string name="delay_render_thread_description">Atrasar thread de renderização do aplicativo quando for enviado dados para a GPU. Ajuda com problemas de desempenho em (muito poucos) aplicativos com taxa de quadros dinâmica.</string>
<string name="advanced">Avançado\"</string>
<string name="advanced">Avançado</string>
<string name="texture_sampling_name">Amostragem de Texturas</string>
<string name="texture_sampling_description">Substitui o filtro de amostragem usado pelos jogos. Isso pode ser útil em certos casos com jogos que se comportem mal durante o upscaling. Em caso de dúvidas, defina como Controlado pelo Jogo.</string>
<string name="shaders_accurate_mul">Multiplicação precisa</string>
@ -222,6 +228,7 @@
<string name="frame_limit_enable_description">Quando ativo, a velocidade de emulação será limitada à uma porcentagem especificada da velocidade normal. Se desativado, a velocidade de emulação será destravada e a tecla de atalho do turbo não irá funcionar.</string>
<string name="frame_limit_slider">Limite de velocidade percentual</string>
<string name="frame_limit_slider_description">Especifica a porcentagem para limitar a velocidade. Com o padrão de 100% a emulação será limitada a velocidade normal. Valores maiores ou menores vão aumentar ou reduzir o limite de velocidade.</string>
<string name="turbo_limit">Limite da Velocidade Turbo:</string>
<string name="expand_to_cutout_area">Expandir para a área recortada</string>
<string name="expand_to_cutout_area_description">Expande a área da tela para incluir a área recortada (ou notch).</string>
<string name="internal_resolution">Resolução Interna</string>
@ -290,7 +297,6 @@
<string name="delay_start_lle_modules_description">Atrasa a inicialização do aplicativo quando os módulos LLE estão ativados.</string>
<string name="deterministic_async_operations">Operações Assíncronas Determinísticas</string>
<string name="deterministic_async_operations_description">Torna as operações assíncronas determinísticas para depuração. Ativar essa opção pode causar congelamentos.</string>
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Orientação da Tela</string>
<string name="layout_screen_orientation_auto_sensor">Automático</string>
@ -298,6 +304,12 @@
<string name="layout_screen_orientation_landscape_reverse">Paisagem Reversa</string>
<string name="layout_screen_orientation_portrait">Retrato</string>
<string name="layout_screen_orientation_portrait_reverse">Retrato Reverso</string>
<string name="aspect_ratio_default">Padrão</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Esticar</string>
<!-- Miscellaneous -->
<string name="clear">Limpar</string>
@ -305,6 +317,7 @@
<string name="ini_saved">As configurações foram salvas</string>
<string name="gameid_saved">As configurações de %1$s foram salvas</string>
<string name="error_saving">Erro ao salvar %1$s.ini: %2$s</string>
<string name="saving">Salvando...</string>
<string name="loading">Carregando…</string>
<string name="next">Próximo</string>
<string name="back">Voltar</string>
@ -333,6 +346,8 @@
<string name="cancelling">Cancelando...</string>
<string name="important">Importante</string>
<string name="dont_show_again">Não mostrar novamente</string>
<string name="visibility">Visibilidade</string>
<string name="information">Informação</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Escolher pasta de jogos</string>
@ -380,6 +395,7 @@
<string name="emulation_control_dpad_slide_enable">Deslize do D-Pad</string>
<string name="emulation_open_settings">Abrir configurações</string>
<string name="emulation_open_cheats">Mostrar Trapaças</string>
<string name="emulation_aspect_ratio">Proporção da Tela</string>
<string name="emulation_switch_screen_layout">Disposição de tela em paisagem</string>
<string name="emulation_switch_portrait_layout">Disposição da tela em retrato</string>
<string name="emulation_screen_layout_largescreen">Tela Grande</string>
@ -414,7 +430,6 @@
<string name="emulation_cycle_landscape_layouts">Trocar Disposições</string>
<string name="emulation_swap_screens">Trocar telas</string>
<string name="emulation_touch_overlay_reset">Redefinir sobreposição</string>
<string name="emulation_show_overlay">Mostrar sobreposição</string>
<string name="emulation_close_game">Fechar jogo</string>
<string name="emulation_toggle_pause">Alternar Pausa</string>
<string name="miscellaneous">Diversos</string>
@ -490,7 +505,6 @@
<!-- About Game Dialog -->
<string name="play">Jogar</string>
<string name="shortcut">Atalho</string>
<string name="uninstall_cia">Desinstalar Aplicativo</string>
<string name="uninstalling">Desinstalando...</string>
<string name="game_context_open_save_dir">Abrir pasta de dados salvos</string>
@ -502,7 +516,7 @@
<string name="game_context_open_extra">Abrir pasta extra</string>
<string name="game_context_uninstall_dlc">Desinstalar DLC</string>
<string name="game_context_uninstall_updates">Desinstalar atualizações</string>
<string name="shortcut">Atalho</string>
<!-- Cheats -->
<string name="cheats">Truques</string>
<string name="cheats_add">Adicionar Trapaça</string>

View file

@ -53,7 +53,6 @@
<string name="warning_skip">Пропустить</string>
<string name="warning_cancel">Отмена</string>
<string name="select">Выбрать</string>
<string name="cannot_skip">Вы не можете пропустить данное действие</string>
<string name="search_recently_played">Запущенные недавно</string>
<string name="search_recently_added">Добавленные недавно</string>
<string name="search_installed">Установленные</string>
@ -152,7 +151,7 @@
<string name="utility">Инструменты</string>
<string name="dump_textures">Снимать дамп текстур</string>
<string name="dump_textures_description">Текстуры сохраняются в dump/textures/[ID игры]/.</string>
<string name="custom_textures">Внешние текстуры</string>
<string name="custom_textures">Пользовательские текстуры</string>
<string name="custom_textures_description">Текстуры загружаются из load/textures/[ID игры]/.</string>
<string name="preload_textures">Предзагрузка внешних текстур</string>
<string name="preload_textures_description">Загружать все внешние текстуры в память. Может существенно повышать использование памяти.</string>
@ -252,7 +251,6 @@
<string name="emulation_screen_layout_hybrid">Совмещённый экран</string>
<string name="emulation_swap_screens">Поменять экраны</string>
<string name="emulation_touch_overlay_reset">Сбросить оверлей</string>
<string name="emulation_show_overlay">Показывать оверлей</string>
<string name="emulation_close_game">Закрыть игру</string>
<string name="emulation_toggle_pause">Вкл/выкл паузу</string>
<string name="emulation_close_game_message">Вы действительно хотите закрыть игру?</string>

View file

@ -83,7 +83,6 @@
<string name="keep_current_azahar_directory">Şimdiki Azahar Dizinini Koru</string>
<string name="use_prior_lime3ds_directory">Eski Lime3DS Dizinini Kullan</string>
<string name="select">Seç</string>
<string name="cannot_skip">Bu adımı geçemezsiniz</string>
<string name="cannot_skip_directory_description">Bu adım Azahar\'ın çalışması için gereklidir. Lütfen devam etmek için bir dizin seçin.</string>
<string name="selecting_user_directory_without_write_permissions">Kayıtların ve diğer bilgilerin depolandığı <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">kullanıcı verileri</a>dizininizdeki yazma izinlerini kaybettiniz. Bu durum bazı uygulama veya Android güncellemelerinden sonra meydana gelebilir. Devam edebilmeniz için lütfen izinleri yeniden kazanmak üzere dizini yeniden seçin.</string>
<string name="set_up_theme_settings">Tema Ayarları</string>
@ -139,6 +138,7 @@
<string name="setup_system_files_possible">Kurulum mümkün.</string>
<string name="setup_system_files_o3ds_needed">Önce eski 3DS kurulumu gereklidir.</string>
<string name="setup_system_files_completed">Kurulum zaten tamamlandı.</string>
<string name="setup_system_files_enter_address">Artic Kurulum Aracı adresini girin</string>
<string name="setup_system_files_preparing">Kurulum hazırlanıyor, lütfen bekleyin...</string>
<string name="boot_home_menu">HOME Menüsünü Aç</string>
<string name="show_home_apps">HOME menü uygulamalarını Uygulamalar listesinde göster</string>
@ -177,7 +177,7 @@
<string name="regenerate_console_id_description">Bu, mevcut sanal 3DS konsol kimliğinizi yenisiyle değiştirecektir. Mevcut sanal 3DS konsol kimliğiniz kurtarılamayacaktır. Bu, uygulamaların içinde beklenmedik etkilere neden olabilir. Eski bir konfigürasyon kaydı kullanıyorsanız bu işlem başarısız olabilir. Devam etmek istiyor musunuz?</string>
<string name="mac_address">MAC Adresi</string>
<string name="regenerate_mac_address">MAC Adresini Yeniden Oluştur</string>
<string name="regenerate_mac_address_description">Bu, mevcut MAC adresinizi yenisiyle değiştirecektir. MAC adresini kurulum aracını kullanarak gerçek konsolunuzdan aldıysanız bunu yapmanız önerilmez. Yine de devam mı?</string>
<string name="regenerate_mac_address_description">Bu, mevcut MAC adresinizi yenisiyle değiştirecektir. MAC adresini kurulum aracını kullanarak gerçek konsolunuzdan aldıysanız bunu yapmanız önerilmez. Yine de devam etmek ister misiniz?</string>
<string name="plugin_loader">3GX Eklenti Yükleyici</string>
<string name="plugin_loader_description">3GX eklentilerini eğer mevcutsa emüle edilmiş SD karttan yükler.</string>
<string name="allow_plugin_loader">Uygulamaların Eklenti Yükleyici Durumunu Değiştirmesine İzin Verin</string>
@ -191,8 +191,10 @@
İç Kamera</string>
<string name="outer_left_camera">Dış Sol Kamera</string>
<string name="outer_right_camera">Dış Sağ Kamera</string>
<string name="image_source">Kamera Resim Kaynağı</string>
<string name="image_source">Kamera Görüntü Kaynağı</string>
<string name="image_source_description">Sanal kameranın görüntü kaynağını ayarlar. Bir görüntü dosyası veya desteklendiğinde bir cihaz kamerası kullanabilirsiniz.</string>
<string name="camera_device">Kamera</string>
<string name="camera_device_description">“Görüntü Kaynağı” ayarı Cihaz Kamerası olarak ayarlanmışsa, bu ayar kullanılacak fiziksel kamerayı ayarlar.</string>
<string name="camera_facing_front">Ön</string>
<string name="camera_facing_back">Geri</string>
<!-- Graphics settings strings -->
@ -207,9 +209,8 @@
<string name="texture_filter_description">Dokulara bir filtre uygulayarak uygulamaların görsellerini geliştirir. Desteklenen filtreler Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale ve MMPX\'tir.</string>
<string name="delay_render_thread">Oyun işleme iş parçacığını geciktir</string>
<string name="delay_render_thread_description">GPU\'ya veri gönderirken oyun işleme iş parçacığını geciktirin. Dinamik kare hızlarına sahip (çok az sayıda) uygulamada performans sorunlarına yardımcı olur.</string>
<string name="advanced">Gelişmiş\"</string>
<string name="texture_sampling_name">Doku Örnekleme</string>
<string name="texture_sampling_description">Oyunlar tarafından kullanılan örnekleme filtresini geçersiz kılar. Bu, yükseltme sırasında kötü davranan oyunlarla ilgili bazı durumlarda yararlı olabilir. Emin değilseniz, bunu Oyun Kontrollü olarak ayarlayın.</string>
<string name="texture_sampling_description">Uygulamalar tarafından kullanılan örnekleme filtresini geçersiz kılar. Bu, görüntü yükseltme sırasında hatalı davranan uygulamaların olduğu bazı durumlarda faydalı olabilir. Emin değilseniz, bunu Uygulama Kontrollü olarak ayarlayın.</string>
<string name="shaders_accurate_mul">İsabetli Çoğaltma</string>
<string name="shaders_accurate_mul_description">Donanım gölgelendiricilerinde daha doğru çarpım kullanır, bu da bazı grafik hatalarını düzeltebilir. Etkinleştirildiğinde performans düşecektir.</string>
<string name="asynchronous_gpu">Asenkron GPU emülasyonunu etkinleştir</string>
@ -239,7 +240,7 @@
<string name="render3d">Stereoskopik 3B Modu</string>
<string name="factor3d">Derinlik</string>
<string name="factor3d_description">3D kaydıracının değerini belirtir. Stereoskopik 3D etkinleştirildiğinde bu değer %0\'dan daha yüksek bir değere ayarlanmalıdır.\nNot: %100\'ün üzerindeki derinlik değerleri gerçek donanımda mümkün değildir ve grafik sorunlarına neden olabilir</string>
<string name="disable_right_eye_render">Sağ Göz Render\'ını Devre Dışı Bırak</string>
<string name="disable_right_eye_render">Sağ Göz İşlemesini Devre Dışı Bırak</string>
<string name="disable_right_eye_render_description">Bazı uygulamalarda performansı büyük ölçüde artırır, ancak diğerlerinde titremeye neden olabilir.</string>
<string name="cardboard_vr">Karton VR</string>
<string name="cardboard_screen_size">Karton Ekran Boyutu</string>
@ -258,6 +259,7 @@
<!-- Audio settings strings -->
<string name="audio_volume">Ses düzeyi</string>
<string name="audio_stretch">Ses Gerdirme</string>
<string name="audio_stretch_description">Takılmayı azaltmak için sesi esnetir. Etkinleştirildiğinde, ses gecikmesini artırır ve performansı biraz düşürür.</string>
<string name="realtime_audio">Gerçek zamanlı sesi etkinleştir</string>
<string name="realtime_audio_description">Emülasyon kare hızındaki düşüşleri hesaba katmak için ses çalma hızını ölçeklendirir. Bu, oyun kare hızı düşük olsa bile sesin tam hızda çalınacağı anlamına gelir. Ses senkronizasyon sorunlarına neden olabilir.</string>
<string name="audio_input_type">Ses Giriş Cihazı</string>
@ -271,14 +273,21 @@
<string name="cpu_clock_speed">CPU Saat Hızı</string>
<string name="vsync">V-Sync\'i Etkinleştir</string>
<string name="vsync_description">Oyun kare hızını cihazınızın yenileme hızına senkronize eder.</string>
<string name="renderer_debug">Hata Ayıklama İşleyicisi</string>
<string name="renderer_debug_description">Grafiklerle ilgili ek hata ayıklama bilgilerini günlüğe kaydedin. Etkinleştirildiğinde, oyun performansı önemli ölçüde azalacaktır.</string>
<string name="instant_debug_log">Her mesajda günlük çıktısını temizle</string>
<string name="instant_debug_log_description">Hata ayıklama günlüğünü hemen dosyaya işler. Azahar çöküyor ve günlük çıktısı kesiliyorsa bunu kullanın.</string>
<string name="delay_start_lle_modules">LLE modülleriyle başlamayı geciktir</string>
<string name="delay_start_lle_modules_description">LLE modülleri etkinken uygulamanın başlamasını geciktirir</string>
<string name="deterministic_async_operations">Deterministik Asenkron İşlemler</string>
<string name="deterministic_async_operations_description">Hata ayıklama için asenkron işlemleri deterministik hale getirir. Bunu etkinleştirmek donmalara neden olabilir.</string>
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Ekran Yönelimi</string>
<string name="layout_screen_orientation_auto_sensor">Otomatik</string>
<string name="layout_screen_orientation_landscape">Yatay</string>
<string name="layout_screen_orientation_landscape_reverse">Ters Yatay</string>
<string name="layout_screen_orientation_portrait">Portre</string>
<string name="layout_screen_orientation_portrait_reverse">Ters Portre</string>
<!-- Miscellaneous -->
<string name="clear">Temizle</string>
<string name="slider_default">Varsayılan</string>
@ -292,6 +301,7 @@
<string name="learn_more">Daha Fazla Öğren </string>
<string name="close">Kapat</string>
<string name="reset_to_default">Varsayılanlara Sıfırla</string>
<string name="redump_games"><![CDATA[Lütfen <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">oyun kartuşlarınızı</a> veya <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">yüklü başlıklarınızı</a>yeniden yüklemek için kılavuzları izleyin.]]></string>
<string name="option_default">Varsayılan</string>
<string name="off">Kapalı</string>
<string name="install">Yükle</string>
@ -311,7 +321,6 @@
<string name="cancelling">İptal ediliyor...</string>
<string name="important">Önemli</string>
<string name="dont_show_again">Tekrar gösterme</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Oyun Dosyası Seç</string>
@ -341,8 +350,11 @@
<string name="emulation_menu_help">Menüye erişmek için Geri\'ye basın</string>
<string name="emulation_save_state">Durumu Kaydet</string>
<string name="emulation_load_state">Durumu Yükle</string>
<string name="emulation_empty_state_slot">Yuva %1$d</string>
<string name="emulation_occupied_state_slot">Yuva %1$d - %2$tF %2$tR</string>
<string name="emulation_show_fps">FPS\'i Göster</string>
<string name="emulation_haptic_feedback">Dokunsal Geri Bildirim</string>
<string name="emulation_overlay_options">Yerleşim Seçenekleri</string>
<string name="emulation_configure_controls">Kontrolleri Yapılandır</string>
<string name="emulation_edit_layout">Düzeni Değiştir</string>
<string name="emulation_done">Bitti</string>
@ -372,6 +384,8 @@
<string name="small_screen_position_bottom_left">Sol Alt</string>
<string name="small_screen_position_above">Yukarı</string>
<string name="small_screen_position_below">Aşağı</string>
<string name="screen_gap">Ekran Boşluğu</string>
<string name="screen_gap_description">Tüm iki ekran modlarında ekranlar arasındaki boşluk. Büyük ekranın 240 piksel yüksekliğine göre px cinsinden ölçülür.</string>
<string name="large_screen_proportion">Büyük Ekran Oranı</string>
<string name="large_screen_proportion_description">Büyük Ekran düzeninde büyük ekran küçük ekrandan kaç kat daha büyük olsun?</string>
<string name="emulation_adjust_custom_layout">Ayarlarda Özel Düzeni Değiştirin</string>
@ -384,9 +398,12 @@
<string name="emulation_custom_layout_width">Genişlik</string>
<string name="emulation_custom_layout_height">Yükseklik</string>
<string name="emulation_swap_screens">Ekranları Değiştir</string>
<string name="emulation_touch_overlay_reset">Yerleşimi Sıfırla</string>
<string name="emulation_close_game">Oyunu Kapat</string>
<string name="emulation_toggle_pause">Duraklatmayı Aç / Kapat</string>
<string name="miscellaneous">Çeşitli</string>
<string name="use_artic_base_controller">Artic Base Sunucusundayken Artic Oyun Kolunu kullan</string>
<string name="use_artic_base_controller_description">Artic Base Sunucusuna bağlanıldığında yapılandırılmış giriş cihazı yerine Artic Base Sunucusu tarafından sağlanan kontrolleri kullanın.</string>
<string name="emulation_close_game_message">Mevcut oyunu kapatmak istediğinizden emin misiniz?</string>
<string name="menu_emulation_amiibo">Amiibo</string>
<string name="menu_emulation_amiibo_load">Yükle</string>
@ -454,7 +471,6 @@
<!-- About Game Dialog -->
<string name="play">Oyna</string>
<string name="shortcut">Kısayol</string>
<string name="uninstall_cia">Uygulamayı Sil</string>
<string name="uninstalling">Siliniyor...</string>
<string name="game_context_open_save_dir">Kayıt Verileri Klasörünü Aç</string>
@ -466,7 +482,7 @@
<string name="game_context_open_extra">Ekstra Klasörünü Aç</string>
<string name="game_context_uninstall_dlc">DLC\'leri Sil</string>
<string name="game_context_uninstall_updates">Güncellemeleri Sil</string>
<string name="shortcut">Kısayol</string>
<!-- Cheats -->
<string name="cheats">Hileler</string>
<string name="cheats_add">Hile Ekle</string>
@ -513,6 +529,8 @@
<string name="theme_mode_light">ık</string>
<string name="theme_mode_dark">Koyu</string>
<!-- Material You theme -->
<string name="material_you">Material You</string>
<string name="material_you_description">Uygulama genelinde işletim sisteminin renk temasını kullanın (Etkinleştirildiğinde “Tema Rengi” ayarını geçersiz kılar)</string>
<!-- Static theme color -->
@ -569,6 +587,9 @@
<string name="side_by_side">Yan Yana</string>
<string name="reverse_side_by_side">Ters Yan Yana</string>
<string name="anaglyph">Anaglif</string>
<string name="interlaced">Geçmeli</string>
<string name="reverse_interlaced">Ters Geçmeli</string>
<!-- Graphics API names -->
<string name="opengles">OpenGLES</string>
<string name="vulkan">Vulkan</string>
@ -621,6 +642,7 @@
<string name="matinique">Martinik</string>
<string name="mexico">Meksika</string>
<string name="monsterrat">Montserrat</string>
<string name="netherlands_antilles">Hollanda Antilleri</string>
<string name="nicaragua">Nikaragua</string>
<string name="panama">Panama</string>
<string name="paraguay">Paraguay</string>

View file

@ -74,6 +74,10 @@
<string name="permission_denied">授权遭拒</string>
<string name="add_games_warning">跳过选择应用文件夹?</string>
<string name="add_games_warning_description">如果未选择文件夹,软件将不会显示在应用列表中。</string>
<string name="permissions">权限</string>
<string name="select_emulator_data_folders">数据文件夹</string>
<string name="select_emulator_data_folders_description"><![CDATA[选择数据文件夹<br/>(需先设置用户文件夹)]]></string>
<string name="permissions_description">授予可选权限以使用模拟器的特定功能</string>
<string name="warning_help">帮助</string>
<string name="warning_skip">跳过</string>
<string name="warning_cancel">取消</string>
@ -83,7 +87,7 @@
<string name="keep_current_azahar_directory">保持当前的 Azahar 目录</string>
<string name="use_prior_lime3ds_directory">使用先前的 Lime3DS 目录</string>
<string name="select">选择</string>
<string name="cannot_skip">此步骤不可跳过</string>
<string name="cannot_skip">您不能跳过设置用户文件夹</string>
<string name="cannot_skip_directory_description">此步骤是 Azahar 正常运行所必需的。请选择一个目录,然后才可继续。</string>
<string name="selecting_user_directory_without_write_permissions">您已失去对<a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">用户数据</a>目录的写入权限,该目录用于存储存档和其他信息数据。某些应用或 Android 更新后可能会出现这种情况。请重新选择该目录以重新获得权限,才能继续操作。</string>
<string name="set_up_theme_settings">主题设置</string>
@ -208,6 +212,8 @@
<string name="graphics_api">图形 API</string>
<string name="spirv_shader_gen">启用 SPIR-V 着色器</string>
<string name="spirv_shader_gen_description">使用 SPIR-V 而不是 GLSL 来模拟 PICA 的着色器</string>
<string name="disable_spirv_optimizer">禁用 SPIR-V 优化器</string>
<string name="disable_spirv_optimizer_description">禁用 SPIR-V 优化过程,可显著减少卡顿,同时几乎不影响性能。</string>
<string name="async_shaders">启用异步着色器编译</string>
<string name="async_shaders_description">在后台编译着色器以减少卡顿。可能出现短暂的图形故障</string>
<string name="linear_filtering">线性过滤</string>
@ -216,7 +222,7 @@
<string name="texture_filter_description">通过对纹理使用滤镜来增强应用的视觉效果。支持的滤镜包括 Anime4K Ultrafast、Bicubic、ScaleForce、xBRZ freescale 和 MMPX。</string>
<string name="delay_render_thread">延迟游戏渲染线程</string>
<string name="delay_render_thread_description">在游戏渲染线程向 GPU 提交数据时延迟线程。有助于解决(极少数)具有动态帧率应用的性能问题。</string>
<string name="advanced">高级选项\"</string>
<string name="advanced">高级选项</string>
<string name="texture_sampling_name">纹理采样</string>
<string name="texture_sampling_description">覆盖游戏所使用的采样过滤器。这在某些情况下提升表现不佳的游戏画质时可能很有用。如果不确定,请将其设置为“由游戏控制”</string>
<string name="shaders_accurate_mul">精确乘法运算</string>
@ -297,14 +303,24 @@
<string name="delay_start_lle_modules_description">当 LLE 模块启用时延迟应用的启动。</string>
<string name="deterministic_async_operations">确定性异步操作</string>
<string name="deterministic_async_operations_description">使异步操作在调试时具有确定性。启用此功能可能会导致停滞。</string>
<string name="enable_rpc_server">启用 RPC 服务器</string>
<string name="enable_rpc_server_desc">在端口 45987 上启用 RPC 服务器。这允许远程读/写客户机内存。</string>
<string name="shader_jit">启用着色器 JIT</string>
<string name="shader_jit_description">使用 JIT 引擎而不是解释器进行软件着色器模拟。</string>
<!-- Layout settings strings -->
<!-- Layout settings strings -->
<string name="layout_screen_orientation">屏幕方向</string>
<string name="layout_screen_orientation_auto_sensor">自动</string>
<string name="layout_screen_orientation_landscape">横向</string>
<string name="layout_screen_orientation_landscape_reverse">横向反转</string>
<string name="layout_screen_orientation_portrait">纵向</string>
<string name="layout_screen_orientation_portrait_reverse">纵向反转</string>
<string name="aspect_ratio_default">默认</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">拉伸</string>
<!-- Miscellaneous -->
<string name="clear">清除</string>
@ -341,6 +357,8 @@
<string name="cancelling">取消中…</string>
<string name="important">重要提示</string>
<string name="dont_show_again">不再显示</string>
<string name="visibility">可见度</string>
<string name="information">信息</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">选择游戏目录</string>
@ -388,6 +406,7 @@
<string name="emulation_control_dpad_slide_enable">十字方向键滑动</string>
<string name="emulation_open_settings">打开设置项</string>
<string name="emulation_open_cheats">开启金手指</string>
<string name="emulation_aspect_ratio">宽高比</string>
<string name="emulation_switch_screen_layout">屏幕布局</string>
<string name="emulation_switch_portrait_layout">纵向屏幕布局</string>
<string name="emulation_screen_layout_largescreen">大屏幕</string>
@ -423,8 +442,9 @@
<string name="emulation_custom_layout_height">高度</string>
<string name="emulation_cycle_landscape_layouts">环形布局</string>
<string name="emulation_swap_screens">交换上下屏</string>
<string name="emulation_rotate_upright">顺时针旋转屏幕</string>
<string name="emulation_touch_overlay_reset">重置虚拟按键</string>
<string name="emulation_show_overlay">显示虚拟按键</string>
<string name="emulation_show_controller_overlay">显示虚拟控制器</string>
<string name="emulation_close_game">关闭游戏</string>
<string name="emulation_toggle_pause">暂停/继续</string>
<string name="miscellaneous">杂项</string>
@ -502,7 +522,6 @@
<!-- About Game Dialog -->
<string name="play">开始游戏</string>
<string name="shortcut">快捷方式</string>
<string name="uninstall_cia">卸载应用</string>
<string name="uninstalling">正在卸载...</string>
<string name="game_context_open_save_dir">打开存档数据文件夹</string>
@ -514,6 +533,40 @@
<string name="game_context_open_extra">打开额外数据文件夹</string>
<string name="game_context_uninstall_dlc">卸载 DLC</string>
<string name="game_context_uninstall_updates">卸载更新</string>
<string name="shortcut">快捷方式</string>
<string name="shortcut_name">快捷方式名称</string>
<string name="edit_icon">编辑图标</string>
<string name="create_shortcut">创建快捷方式</string>
<string name="shortcut_name_empty">快捷方式名称不能为空</string>
<string name="shortcut_image_stretch_toggle">拉伸以适合图像</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">显示性能参数</string>
<string name="performance_overlay_options">性能参数覆盖</string>
<string name="performance_overlay_enable">启用性能参数覆盖</string>
<string name="performance_overlay_options_description">设置是否显示性能参数以及其他覆盖信息。</string>
<string name="overlay_show_fps">显示帧率</string>
<string name="overlay_show_fps_description">显示当前每秒帧数。</string>
<string name="overlay_show_frametime">显示帧生成时间</string>
<string name="overlay_show_frametime_description">显示当前帧生成时间。</string>
<string name="overlay_show_speed">显示速度</string>
<string name="overlay_show_speed_description">显示当前模拟速度百分比。</string>
<string name="overlay_show_app_ram_usage">显示应用内存占用</string>
<string name="overlay_show_app_ram_usage_description">显示模拟器使用的内存容量。</string>
<string name="overlay_show_available_ram">显示可用内存</string>
<string name="overlay_show_available_ram_description">显示可用的内存容量。</string>
<string name="overlay_show_battery_temp">显示电池温度</string>
<string name="overlay_show_battery_temp_description">以摄氏度和华氏度显示当前电池温度。</string>
<string name="overlay_position">覆盖位置</string>
<string name="overlay_position_description">选择性能参数覆盖在屏幕上的显示位置。</string>
<string name="overlay_position_top_left">左上</string>
<string name="overlay_position_top_right">右上</string>
<string name="overlay_position_bottom_left">左下</string>
<string name="overlay_position_bottom_right">右下</string>
<string name="overlay_position_center_top">中上</string>
<string name="overlay_position_center_bottom">中下</string>
<string name="overlay_background">覆盖背景</string>
<string name="overlay_background_description">在覆盖层后面添加背景以便于识别。</string>
<!-- Cheats -->
<string name="cheats">金手指</string>

View file

@ -8,7 +8,7 @@
<!-- Home Strings -->
<string name="grid_menu_core_settings">Einstellungen</string>
<string name="home_options">Optionen</string>
<string name="home_options">Einstellungen</string>
<string name="home_search">Suchen</string>
<string name="home_games">Anwendungen</string>
<string name="settings_description">Emulatoreinstellungen ändern </string>
@ -32,6 +32,8 @@
<string name="select_citra_user_folder_home_description">Ändere die Dateien, die Azahar nutzt, um Anwendungen zu laden</string>
<string name="theme_and_color_description">Ändere das Aussehen der App</string>
<string name="install_cia_title">CIA Installieren</string>
<string name="warning_3ds_files"><![CDATA[Verschlüsselte Dateien und .3ds-Dateien werden nicht mehr unterstützt. Eine Entschlüsselung und/oder Umbenennung in .cci kann erforderlich sein. <a href=\"https://azahar-emu.org/blog/game-loading-changes/\">Erfahre mehr.</a>]]></string>
<!-- GPU driver installation -->
<string name="select_gpu_driver">GPU-Treiber auswählen</string>
<string name="select_gpu_driver_title">Möchtest du den aktuellen GPU-Treiber ersetzten</string>
@ -72,14 +74,22 @@
<string name="permission_denied">Berechtigung verweigert</string>
<string name="add_games_warning">Auswahl des Anwendungs Ordner überspringen?</string>
<string name="add_games_warning_description">Software wird nicht in der Anwendungs Liste angezeigt, wenn kein Ordner ausgewählt ist.</string>
<string name="permissions">Berechtigungen</string>
<string name="select_emulator_data_folders">Daten Ordner</string>
<string name="select_emulator_data_folders_description"><![CDATA[Daten Ordner auswählen<br/>(Nutzer Ordner ist obligatorisch)]]></string>
<string name="permissions_description">Optionale Berechtigungen erteilen um spezifische Funktionen des Emulators zu verwenden</string>
<string name="warning_help">Hilfe</string>
<string name="warning_skip">Überspringen</string>
<string name="warning_cancel">Abbrechen</string>
<string name="select_citra_user_folder">Wähle einen Nutzterordner aus</string>
<string name="select_citra_user_folder">Wähle ein Nutzerverzeichnis aus</string>
<string name="select_citra_user_folder_description"><![CDATA[Wähle dein <a href=\"https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage\">Nutzerdaten</a>verzeichnis, mit dem unteren Knopf.]]></string>
<string name="select_which_user_directory_to_use">Es hat den Anschein, dass du Nutzerverzeichnisse für Lime3DS und Azahar eingerichtet hast. Das kann daran liegen, dass du von Lime3DS auf Azahar upgegradet hast und dabei ein neues Verzeichnis ausgewählt hast.\n\nEs kann sein, dass du dadurch gedacht hast, dass deine Speicherstände verloren gegangen sind - Wir entschuldigen und, sollte dies der Fall sein.\n\nMöchtest du wieder dein ursprüngliches Lime3DS-Verzeichnis nutzen, wodurch deine Einstellungen und Speicherstände von Lime3DS wiederhergestellt werden, oder das aktuelle Azahar-Nutzerverzeichnis nutzen?\n\nKeine der Verzeinisse werden dadurch gelöscht und du kannst das Verzeichnis jederzeit wechseln, indem du die „Wähle ein Nutzerverzeichnis aus“-Option auswählst.</string>
<string name="keep_current_azahar_directory">Aktuelles Azahar-Verzeichnis behalten</string>
<string name="use_prior_lime3ds_directory">Vorheriges Lime3DS-Verzeichnis nutzen</string>
<string name="select">Auswählen</string>
<string name="cannot_skip">Du kannst diesen Schritt nicht überspringen</string>
<string name="cannot_skip">Der Nutzer Ordner muss gesetzt sein</string>
<string name="cannot_skip_directory_description">Dieser Schritt ist nötig, damit Azahar funktionieren kann. Bitte wähle ein Verzeichnis aus, damit du fortfahren kannst.</string>
<string name="selecting_user_directory_without_write_permissions">Die Schreibrechte auf dein <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">Nutzerdaten</a>-Verzeichnis, wo deine Speicherstände und andere Informationen gespeichert sind, fehlen. Dies kann durch ein Anwendungsupdate, oder ein Androidupdate passiert sein. Bitte wähle das Verzeichnis erneut aus, damit die Berechtigungen wiederhergestellt werden können.</string>
<string name="set_up_theme_settings">Design-Einstellung</string>
<string name="setup_theme_settings_description">Konfigurieren sie ihre Designeinstellungen für Azahar.</string>
<string name="setup_set_theme">Design wählen</string>
@ -116,8 +126,28 @@
<string name="input_binding_description_horizontal_axis">Bewegen den Joystick nach links oder rechts.</string>
<string name="button_home">HOME</string>
<string name="button_swap">Bildschirme tauschen</string>
<string name="button_turbo">Turbo</string>
<string name="input_message_analog_only">Diese Eingabe muss an einen Analogstick oder eine Steuerkreuz-Achse gebunden sein!</string>
<string name="input_message_button_only">Diese Eingabe muss an einen Gamepad-Knopf gebunden sein!</string>
<string name="turbo_limit_hotkey">Turbogeschwindigkeit</string>
<string name="turbo_enabled_toast">Turbogeschwindigkeit aktiviert</string>
<string name="turbo_disabled_toast">Turbogeschwindigkeit deaktiviert</string>
<!-- System files strings -->
<string name="setup_system_files">Systemdateien</string>
<string name="setup_system_files_description">Systemdateivorgänge wie die Installation von Systemdateien oder das Booten des HOME-Menüs durchführen</string>
<string name="setup_tool_connect">Verbindung mit Artic-Einrichtungstool erstellen</string>
<string name="setup_system_files_preamble"><![CDATA[Azahar benötigt Dateien von einer echten Konsole, um einige seiner Funktionen nutzen zu können. Du kannst diese Dateien mit dem Azahar Artic Einrichtung-Tool bekommen.<br>Hinweise:<ul><li><b>Bei diesem Vorgang werden konsolenspezifische Dateien in Azahar installiert. Gib deine Benutzer- oder NAND-Ordner nicht frei, nachdem der Einrichtungsvorgang durchgeführt wurde!</b></li><li>Während des Einrichtungsvorgangs, verknüpft Azahar deine Konsole mit dem Einrichtungstool. Du kannst die Verknüpfung jederzeit im „Systemdateien“-Reiter in den Emulatoreinstellungen beenden.</li><li>Gehe nicht zeitgleich mit deinem eigenen 3DS und Azahr online, da dies sonst zu Probleme führen könnte.</li><li>Damit die New 3DS-Einrichtung funktioniert, ist zuerst eine Old 3DS-Einrichtung erforderlich (Es wird empfohlen beides einzurichten).</li><li>Beide Setup-Modi funktionieren unabhängig vom Modell der Konsole, auf dem das Setup-Tool ausgeführt wird.</li></ul>]]></string>
<string name="setup_system_files_detect">Aktueller Systemdateienstatus wird abgerufen, bitte warten...</string>
<string name="delete_system_files">Einzigartige Konsolendaten entkoppeln</string>
<string name="delete_system_files_description"><![CDATA[Dadurch wird die Verknüpfung zwischen Azahar und deiner echten Konsole getrennt, was folgendes mitsichbringt:<br><ul><li>Dein OTP, SecureInfo und LocalFriendCodeSeed werden von Azahar entfernt.</li><li>Deine Freundesliste wird zurückgesetzt und du wirst aus deinem NNID/PNID Account abgemeldet.</li><li>Systemdateien und eShop-Titel, die durch Azahar erhalten wurden, werden unzugänglich, bis die Konsole wieder verknüpft wird (Speicherdaten gehen nicht verloren).</li></ul><br>Forfahren?]]></string>
<string name="setup_system_files_o3ds">Old 3DS-Einrichtung</string>
<string name="setup_system_files_n3ds">New 3DS-Einrichtung</string>
<string name="setup_system_files_possible">Einrichtung ist möglich.</string>
<string name="setup_system_files_o3ds_needed">Du musst zuerst die Old 3DS-Einrichtung abschließen.</string>
<string name="setup_system_files_completed">Einrichtung bereits abgeschlossen.</string>
<string name="setup_system_files_enter_address">Gib die Adresse des Artic Einrichtung-Tools ein</string>
<string name="setup_system_files_preparing">Einrichtung wird vorbereitet, bitte warten...</string>
<string name="boot_home_menu">HOME-Menü starten</string>
<string name="show_home_apps">Zeige Home Menü Apps in der Anwendungs Liste</string>
<string name="run_system_setup">System-Setup ausführen, wenn das HOME-Menü aufgerufen wird</string>
@ -127,14 +157,20 @@
<string name="generic_buttons">Knöpfe</string>
<string name="button">Knopf</string>
<!-- System settings strings -->
<string name="emulation_settings">Emulationseinstellungen</string>
<string name="username">Nutzername</string>
<string name="new_3ds">New 3DS-Modus</string>
<string name="lle_applets">Nutze LLE-Applets (sofern installiert)</string>
<string name="enable_required_online_lle_modules">Aktivere benötigte LLE-Module, um Online-Funktionen zu aktivieren (sofern installiert)</string>
<string name="enable_required_online_lle_modules_desc">Aktiviert die LLE-Module, die vonnöten sind, um Online-Multispieler, eShop-Zugriff und mehr zu verwenden.</string>
<string name="clock">Uhr</string>
<string name="init_clock">Uhr</string>
<string name="init_clock_description">Du kannst die 3DS-Uhr so einstellen, dass sie entweder die Systemzeit deines Gerätes widerspiegelt, oder dir eine eigene Zeit aussuchen.</string>
<string name="device_clock">Systemuhr</string>
<string name="simulated_clock">Simulierte Uhr</string>
<string name="simulated_clock_description">Falls die Systemuhr auf „Simulierte Uhr“ gesetzt ist, verschiebt dies dementsprechend die Ursprungszeit und das Ursprungsdatum, auf das die Uhr eingestellt war.</string>
<string name="profile_settings">Profileinstellungen</string>
<string name="emulated_region">Region</string>
<string name="emulated_language">Sprache</string>
<string name="birthday">Geburtstag</string>
@ -146,10 +182,18 @@
<string name="steps_per_hour_description">Anzahl der Schritte, die pro Stunde am Schrittzähler hinzugefügt werden soll. Wähle einen Bereich zwischen 0 und 65.535.</string>
<string name="console_id">Konsolen-ID</string>
<string name="regenerate_console_id">Konsolen-ID regenerieren</string>
<string name="regenerate_console_id_description">Dadurch wird deine aktuelle virtuelle 3DS Konsolen-ID durch eine neue ersetzt. Die aktuelle virtuelle Konsolen-ID kann nicht wiederhergestellt werden. Dies kann unerwartete Auswirkungen auf Anwendungen haben. Dies kann fehlschlagen, wenn du eine veraltete Konfigurationsspeicherdatei nutzt. Fortfahren?</string>
<string name="mac_address">MAC-Adresse</string>
<string name="regenerate_mac_address">MAC-Adresse regenerieren</string>
<string name="regenerate_mac_address_description">Dadurch wird deine aktuelle MAC-Adresse durch eine neue ersetzt. Dies wird nicht empfohlen, wenn du die MAC-Adresse mithilfe des Einrichtungs-Tools von deiner echten Konsole erhalten hast. Fortfahren?</string>
<string name="plugin_loader">3GX-Plugin-Lader</string>
<string name="plugin_loader_description">Lade 3GX Plugins von der emulierten SD-Karte, wenn sie verfügbar sind.</string>
<string name="allow_plugin_loader">Erlaubt Anwendungen den Plugin-Lader-Zustand zu ändern</string>
<string name="allow_plugin_loader_description">Erlaubt es Homebrew-Anwendungen den Plugin-Lader zu aktivieren, auch wenn es sonst deaktiviert ist.</string>
<string name="region_mismatch">Region passt nicht überein</string>
<string name="region_mismatch_emulated">Die Ländereinstellung ist für die ausgewählte emulierte Region nicht gültig.</string>
<string name="region_mismatch_console">Die Ländereinstellung ist für die gekoppelte Konsole ungültig.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Innenkamera</string>
<string name="outer_left_camera">Außenkamera Links</string>
@ -168,6 +212,8 @@
<string name="graphics_api">Grafik API</string>
<string name="spirv_shader_gen">SPIR-V-Shader-Generierung aktivieren</string>
<string name="spirv_shader_gen_description">Gibt den Fragment-Shader aus, der zur Emulation von PICA unter Verwendung von SPIR-V statt GLSL verwendet wird.</string>
<string name="disable_spirv_optimizer">SPIR-V Optimierer deaktivieren</string>
<string name="disable_spirv_optimizer_description">Deaktiviert den SPIR-V Optimierungsschritt, was stottern reduziert und die Leistung nur geringfügig beeinflusst.</string>
<string name="async_shaders">Asynchrone GPU-Emulation aktivieren</string>
<string name="async_shaders_description">Kompiliere Shader im Hintergrund, um das Stottern des Spiels zu reduzieren. Dadurch kann es zu temporären grafischen Fehlern während des Spielens kommen.</string>
<string name="linear_filtering">Lineare Filterung</string>
@ -176,15 +222,24 @@
<string name="texture_filter_description">Verbessert die Optik von Anwendungen durch Anwenden eines Filters auf Texturen. Die unterstützten Filter sind Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale und MMPX.</string>
<string name="delay_render_thread">Game-Render-Thread verzögern</string>
<string name="delay_render_thread_description">Verzögert den Render-Thread des Spiels, wenn er Daten an die GPU sendet. Hilft bei Leistungsproblemen in den (sehr wenigen) Anwendungen mit dynamischen Frameraten.</string>
<string name="advanced">Erweitert</string>
<string name="texture_sampling_name">Textur-Sampling</string>
<string name="texture_sampling_description">Setzt den von Spielen verwendeten Sampling-Filter außer Kraft. Dies kann in bestimmten Fällen nützlich sein, wenn sich die Spiele beim Hochskalieren schlecht verhalten. Wenn du dir unsicher bist, setze diese Einstellung auf „Spielgesteuert“</string>
<string name="shaders_accurate_mul">Genaue Multiplikation</string>
<string name="shaders_accurate_mul_description">Benutzt genauere Multiplikation in Hardware-Shadern, welche einige Grafikbugs fixen kann. Wenn aktiviert, ist die Leistung reduziert.</string>
<string name="asynchronous_gpu">Asynchrone GPU-Emulation aktivieren</string>
<string name="asynchronous_gpu_description">Verwendet einen separaten Thread, um die GPU asynchron zu emulieren. Wenn aktiviert, wird die Leistung verbessert.</string>
<string name="frame_limit_enable">Höchstgeschwindigkeit</string>
<string name="frame_limit_enable_description">Wenn aktiviert, wird die Emulationsgeschwindigkeit auf einen angegebenen Prozentsatz der normalen Geschwindigkeit begrenzt. Wenn diese Option deaktiviert ist, wird die Emulationsgeschwindigkeit nicht begrenzt und der Hotkey für die Turbogeschwindigkeit funktioniert nicht.</string>
<string name="frame_limit_slider">Höchstgeschwindigkeit in Prozent</string>
<string name="frame_limit_slider_description">Gibt den Prozentsatz zur Begrenzung der Emulationsgeschwindigkeit an. Mit der Voreinstellung von 100% wird die Emulation auf normale Geschwindigkeit begrenzt. Höhere oder niedrigere Werte erhöhen oder verringern die Geschwindigkeitsbeschränkung.</string>
<string name="turbo_limit">Turbogeschwindigkeitslimit</string>
<string name="turbo_limit_description">Emulationsgeschwindigkeit wird genutzt, während der Turbo-Hotkey aktiviert ist.</string>
<string name="expand_to_cutout_area">Zum Ausschnitbereich erweitern</string>
<string name="expand_to_cutout_area_description">Erweitert den Displaybereich, um den Ausschnitt- oder Einkerbungsbereich einzuschließen.</string>
<string name="internal_resolution">Interne Auflösung</string>
<string name="internal_resolution_description">Gibt die zum Rendern verwendete Auflösung an. Eine hohe Auflösung verbessert die Bildqualität erheblich, geht aber auch zu Lasten der Leistung und kann bei bestimmten Anwendungen zu Störungen führen.</string>
<string name="internal_resolution_setting_auto">Auto (Bildschirmgröße)</string>
<string name="internal_resolution_setting_1x">Nativ (400x240)</string>
<string name="internal_resolution_setting_2x">2x Nativ (800x480)</string>
<string name="internal_resolution_setting_3x">3x Nativ (1200x720)</string>
@ -200,6 +255,7 @@
<string name="stereoscopy">Stereoskopie</string>
<string name="render3d">Stereoskopischer 3D-Modus</string>
<string name="factor3d">Tiefe</string>
<string name="factor3d_description">Gibt den Wert des 3D-Schiebereglers an. Dieser Wert sollte auf mehr als 0 % eingestellt werden, wenn Stereoskopisches 3D aktiviert ist.\nHinweis: Tiefenwerte über 100% werden nicht von echter Hardware unterstützt und könnten zu grafischen Fehlern führen.</string>
<string name="disable_right_eye_render">Rendering für das rechte Auge deaktivieren</string>
<string name="disable_right_eye_render_description">Verbessert die Leistung in einigen Anwendungen erheblich, kann in anderen jedoch zu Flackern führen.</string>
<string name="cardboard_vr">Karton-VR</string>
@ -242,13 +298,29 @@
<string name="renderer_debug">Debug-Renderer</string>
<string name="renderer_debug_description">Zusätzliche grafisch spezifische Debuginformationen werden protokolliert. Wenn dies aktiviert ist, ist die Leistung des Spiels minimal reduziert.</string>
<string name="instant_debug_log">Protokollausgabe bei jeder Nachricht</string>
<!-- Layout settings strings -->
<string name="instant_debug_log_description">Überträgt das Debugprotokoll sofort in eine Datei. Verwenden Sie dies, wenn Azahar abstürzt und die Protokollausgabe abgeschnitten wird.</string>
<string name="delay_start_lle_modules">Start mit LLE-Module verzögern</string>
<string name="delay_start_lle_modules_description">Verzögert den Start der App, wenn die LLE-Module aktiviert sind.</string>
<string name="deterministic_async_operations">Deterministische asynchrone Operationen</string>
<string name="deterministic_async_operations_description">Asynchrone Operationen werden für Debug-Zwecke deterministisch. Die Aktivierung dieser Funktion kann zum Einfrieren führen.</string>
<string name="enable_rpc_server">RPC Server aktivieren</string>
<string name="enable_rpc_server_desc">Aktiviert den RPC Server auf Port 45987. Dadurch können Programme im emulierten RAM lesen und schreiben.</string>
<string name="shader_jit">Shader JIT aktivieren</string>
<string name="shader_jit_description">Verwendet die JIT Engine anstatt des Interpreters für Software Shader Emulation.</string>
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Bildschirmausrichtung</string>
<string name="layout_screen_orientation_auto_sensor">Automatisch</string>
<string name="layout_screen_orientation_landscape">Querformat </string>
<string name="layout_screen_orientation_landscape_reverse">Umgekehrtes Querformat</string>
<string name="layout_screen_orientation_portrait">Hochformat</string>
<string name="layout_screen_orientation_portrait_reverse">Umgekehrtes Hochformat</string>
<string name="aspect_ratio_default">Standard</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Gestreckt</string>
<!-- Miscellaneous -->
<string name="clear">Zurücksetzen</string>
@ -256,6 +328,7 @@
<string name="ini_saved">Einstellungen gespeichert</string>
<string name="gameid_saved">Einstellungen gespeichert für %1$s</string>
<string name="error_saving">Fehler beim Speichern von %1$s.ini: %2$s</string>
<string name="saving">Speichervorgang...</string>
<string name="loading">Ladevorgang...</string>
<string name="next">Weiter</string>
<string name="back">Zurück</string>
@ -276,10 +349,17 @@
<string name="select_rtc_time">RTC-Zeit auswählen</string>
<string name="reset_setting_confirmation">Möchtest du diese Einstellung auf den Werkzustand zurücksetzen?</string>
<string name="setting_not_editable">Du kannst das nicht bearbeiten</string>
<string name="setting_disabled">Einstellungen deaktiviert</string>
<string name="setting_disabled_description">Diese Einstellung ist aktuell deaktiviert, da eine andere Einstellung nicht den geeigneten Wert hat. </string>
<string name="setting_not_editable_description">Diese Einstellung kann nicht geändert werden, solange ein Spiel läuft.</string>
<string name="auto_select">Automatisch auswählen</string>
<string name="start">Start</string>
<string name="cancelling">Wird abgebrochen...</string>
<string name="important">Wichtig</string>
<string name="dont_show_again">Nicht noch einmal anzeigen</string>
<string name="visibility">Sichtbarkeit</string>
<string name="information">Information</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Spieleordner auswählen</string>
@ -326,6 +406,7 @@
<string name="emulation_control_dpad_slide_enable">Steuerkreuz-Gleiten</string>
<string name="emulation_open_settings">Einstellungen öffnen</string>
<string name="emulation_open_cheats">Cheats öffnen</string>
<string name="emulation_aspect_ratio">Seitenverhältnis</string>
<string name="emulation_switch_screen_layout">Querformat-Bildschirmanordnung</string>
<string name="emulation_switch_portrait_layout">Hochformat-Bildschirmanordnung</string>
<string name="emulation_screen_layout_largescreen">Großer Bildschirm</string>
@ -346,6 +427,8 @@
<string name="small_screen_position_bottom_left">Unten Links</string>
<string name="small_screen_position_above">Oben</string>
<string name="small_screen_position_below">Unten</string>
<string name="screen_gap">Bildschirmabstand</string>
<string name="screen_gap_description">Abstand zwischen den Bildschirmen in allen Zwei-Bildschirm-Modi. Gemessen in px relativ zur 240px-Höhe des größeren Bildschirms.</string>
<string name="large_screen_proportion">Größe des großen Bildschirms</string>
<string name="large_screen_proportion_description">Wie viel größer ist der große Bildschirm, als der kleine in der Bildschirmanordnung?</string>
<string name="emulation_adjust_custom_layout">Bearbeite die benutzerdefinierte Anordnung in den Einstellungen</string>
@ -359,12 +442,14 @@
<string name="emulation_custom_layout_height">Höhe</string>
<string name="emulation_cycle_landscape_layouts">Anordnung wechseln</string>
<string name="emulation_swap_screens">Bildschirme tauschen</string>
<string name="emulation_rotate_upright">Bildschirm aufrecht rotieren</string>
<string name="emulation_touch_overlay_reset">Overlay zurücksetzen</string>
<string name="emulation_show_overlay">Overlay anzeigen</string>
<string name="emulation_show_controller_overlay">Controller Overlay anzeigen</string>
<string name="emulation_close_game">Spiel schließen</string>
<string name="emulation_toggle_pause">Pause umschalten</string>
<string name="miscellaneous">Weiteres</string>
<string name="use_artic_base_controller">Verwende den Artic Controller, wenn eine Verbindung zum Artic Base Server besteht</string>
<string name="use_artic_base_controller_description">Verwende die Artic Base Server bereitgestellten Steuerelemente, wenn du damit verbunden bist, anstelle des konfigurierten Eingabegeräts.</string>
<string name="emulation_close_game_message">Möchtest du das Spiel wirklich schließen?</string>
<string name="menu_emulation_amiibo">Amiibo</string>
<string name="menu_emulation_amiibo_load">Laden</string>
@ -426,13 +511,36 @@
<string name="save_load_error">Fehler beim Speichern/Laden</string>
<string name="fatal_error">Schwerwiegender Fehler</string>
<string name="fatal_error_message">Es ist ein schwerwiegender Fehler aufgetreten. Weitere Informationen findest du in der Protokolldatei.\nDas Fortfahren könnte zu ungewollten Abstürzen oder Problemen führen.</string>
<string name="invalid_region">Ungültige Region</string>
<string name="unsupported_encrypted">Nicht unterstützte verschlüsselte Anwendung</string>
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Shader werden vorbereitet</string>
<string name="building_shaders">Shader werden erstellt</string>
<!-- About Game Dialog -->
<string name="play">Spielen</string>
<string name="uninstall_cia">Anwendung deinstallieren</string>
<string name="uninstalling">Deinstallationsvorgang...</string>
<string name="game_context_open_save_dir">Speicherdateienverzeichnis öffnen</string>
<string name="game_context_open_app">Anwendungsverzeichnis öffnen</string>
<string name="game_context_open_mods">Modverzeichnis öffnen</string>
<string name="game_context_open_textures">Texturverzeichnis öffnen</string>
<string name="game_context_open_dlc">DLC-Verzeichnis öffnen</string>
<string name="game_context_open_updates">Updates-Verzeichnis öffnen</string>
<string name="game_context_open_extra">Extraverzeichnis öffnen</string>
<string name="game_context_uninstall_dlc">DLC deinstallieren</string>
<string name="game_context_uninstall_updates">Updates deinstallieren</string>
<string name="shortcut">Verknüpfung</string>
<string name="overlay_position_top_left">Links Oben</string>
<string name="overlay_position_top_right">Rechts Oben</string>
<string name="overlay_position_bottom_left">Links Unten</string>
<string name="overlay_position_bottom_right">Rechts Unten</string>
<string name="overlay_position_center_top">Oben Mittig</string>
<string name="overlay_position_center_bottom">Unten Mittig</string>
<string name="overlay_background">Overlay Hintergrund</string>
<string name="overlay_background_description">Fügt einen Hintergrund hinter dem Overlay hinzu für bessere Lesbarkeit.</string>
<!-- Cheats -->
<string name="cheats">Cheats</string>
<string name="cheats_add">Cheat hinzufügen</string>
@ -453,6 +561,7 @@
</plurals>
<string name="cia_install_notification_channel_description">Azahar-Benachrichtigungen während CIA-Installation</string>
<string name="cia_install_notification_title">CIA wird installiert</string>
<string name="cia_install_notification_installing">Installiere %1$s (%2$d/%3$d)</string>
<string name="cia_install_notification_success_title">CIA erfolgreich installiert</string>
<string name="cia_install_notification_error_title">CIA konnte nicht installiert werden</string>
<string name="cia_install_success">„%s“ wurde erfolgreich installiert</string>
@ -550,7 +659,11 @@
<string name="xbrz">xBRZ</string>
<string name="mmpx">MMPX</string>
<!-- Texture Sampling names -->
<string name="game_controlled">Spielgesteuert</string>
<string name="nearest_neighbor">Nearest-Neighbor</string>
<string name="linear">Linear</string>
<!-- Sound output modes -->
<string name="mono">Mono</string>
<string name="stereo">Stereo</string>

View file

@ -74,14 +74,22 @@
<string name="permission_denied">Autorisation refusée</string>
<string name="add_games_warning">Passer la sélection du dossier des applications ?</string>
<string name="add_games_warning_description">Les logiciels ne seront pas affichés dans la liste des applications si un dossier n\'est pas sélectionné.</string>
<string name="permissions">Autorisations</string>
<string name="select_emulator_data_folders">Dossiers de données</string>
<string name="select_emulator_data_folders_description"><![CDATA[Sélectionnez les dossiers de données<br/>(le dossier utilisateur est obligatoire)]]></string>
<string name="permissions_description">Accorder des autorisations facultatives pour utiliser des fonctionnalités spécifiques de l\'émulateur</string>
<string name="warning_help">Aide</string>
<string name="warning_skip">Passer</string>
<string name="warning_cancel">Annuler</string>
<string name="select_citra_user_folder">Sélectionnez le dossier utilisateur</string>
<string name="select_citra_user_folder_description"><![CDATA[Sélectionnez le répertoire des <a href=\"https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage\">données utilisateur</a> avec le bouton ci-dessous.]]></string>
<string name="select_which_user_directory_to_use">Il semble que vous ayez défini des répertoires utilisateur pour Lime3DS et Azahar. Cela est probablement dû au fait que vous avez effectué une mise à niveau vers Azahar et que, lorsque vous y avez été invité, vous avez choisi un répertoire utilisateur différent de celui utilisé pour Lime3DS. \n\nCela vous a peut-être donné l\'impression d\'avoir perdu vos sauvegardes ou d\'autres paramètres. Nous vous prions de nous en excuser si tel est le cas.\n\nSouhaitez-vous revenir à votre répertoire utilisateur Lime3DS d\'origine, restaurer les paramètres et les sauvegardes de Lime3DS, ou conserver votre répertoire utilisateur Azahar actuel ?\n\nQuel que soit votre choix, aucun des deux répertoires ne sera supprimé et vous pourrez passer librement de l\'un à l\'autre à l\'aide de l\'option « Sélectionner le dossier utilisateur ».</string>
<string name="keep_current_azahar_directory">Conserver le répertoire Azahar actuel</string>
<string name="use_prior_lime3ds_directory">Utiliser l\'ancien répertoire Lime3DS</string>
<string name="select">Sélectionner</string>
<string name="cannot_skip">Vous ne pouvez pas passer cette étape</string>
<string name="cannot_skip">Vous ne pouvez pas ignorer la configuration du dossier utilisateur</string>
<string name="cannot_skip_directory_description">Cette étape est requise pour permettre à Azahar de fonctionner. Sélectionnez un répertoire et ensuite vous pourrez continuer.</string>
<string name="selecting_user_directory_without_write_permissions">Vous avez perdu les droits d\'écriture sur votre répertoire de <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">données utilisateur</a>, où sont stockées les sauvegardes et autres informations. Cela peut se produire après certaines mises à jour d\'applications ou d\'Android. Veuillez resélectionner le répertoire pour récupérer les droits d\'accès afin de pouvoir continuer.</string>
<string name="set_up_theme_settings">Paramètres du thème</string>
<string name="setup_theme_settings_description">Configurez les préférences de votre thème pour Azahar.</string>
<string name="setup_set_theme">Mettre le thème</string>
@ -118,13 +126,21 @@
<string name="input_binding_description_horizontal_axis">Déplacez votre joystick à gauche ou à droite.</string>
<string name="button_home">HOME</string>
<string name="button_swap">Permuter les écrans</string>
<string name="button_turbo">Turbo</string>
<string name="input_message_analog_only">Cette commande doit être rattachée à un stick analogique de manette ou à un axe de la manette + !</string>
<string name="input_message_button_only">Cette commande doit être rattachée à un bouton de la manette !</string>
<string name="turbo_limit_hotkey">Turbo Speed</string>
<string name="turbo_enabled_toast">Turbo Speed activé</string>
<string name="turbo_disabled_toast">Turbo Speed désactivé</string>
<!-- System files strings -->
<string name="setup_system_files">Fichiers système</string>
<string name="setup_system_files_description">Effectuer des opérations sur les fichiers système, telles que l\'installation de fichiers système ou le démarrage du menu Home.</string>
<string name="setup_tool_connect">Connexion à Artic Setup Tool</string>
<string name="setup_system_files_preamble"><![CDATA[Azahar a besoin des données et des fichiers de micrologiciel propres à une console réelle pour pouvoir utiliser certaines de ses fonctionnalités. Ces fichiers et données peuvent être configurés à l\'aide de l\'outil <a href=https://github.com/azahar-emu/ArticSetupTool>Azahar Artic Setup Tool</a>.<br>Notes :<ul><li><b>Cette opération installera des données uniques à la console Azahar. Ne partagez pas vos dossiers utilisateur ou NAND après avoir effectué le processus d\'installation !</b></li><li>Pendant le processus d\'installation, Azahar se connectera à la console exécutant l\'outil d\'installation. Vous pourrez ensuite déconnecter la console à partir de l\'onglet Fichiers système dans le menu des options de l\'émulateur.</li><li>Ne vous connectez pas à Internet avec Azahar et votre console 3DS en même temps après avoir configuré les fichiers système, car cela pourrait causer des problèmes.</li><li>La configuration de la OLD 3DS est nécessaire pour que la configuration de la New 3DS fonctionne (il est recommandé de configurer les deux).</li><li>Les deux modes de configuration fonctionnent quel que soit le modèle de console sur lequel l\'outil de configuration est exécuté.</li></ul>]]></string>
<string name="setup_system_files_detect">Récupération de l\'état actuel des fichiers du système, veuillez patienter...</string>
<string name="delete_system_files">Dissocier les données uniques de la console</string>
<string name="delete_system_files_description"><![CDATA[Cette action désassociera votre console réelle d\'Azahar, avec les conséquences suivantes :<br><ul><li>Votre OTP, SecureInfo et LocalFriendCodeSeed seront supprimés d\'Azahar.</li><li>Votre liste d\'amis sera réinitialisée et vous serez déconnecté de votre compte NNID/PNID.</li><li>Les fichiers système et les titres de la boutique en ligne obtenus via Azahar deviendront inaccessibles jusqu\'à ce que la même console soit à nouveau connectée à l\'aide de l\'outil de configuration (les données sauvegardées ne seront pas perdues).</li></ul><br>Continuer ?]]></string>
<string name="setup_system_files_o3ds">Configuration Old 3DS</string>
<string name="setup_system_files_n3ds">Configuration New 3DS</string>
<string name="setup_system_files_possible">Configuration possible.</string>
@ -153,6 +169,7 @@
<string name="init_clock_description">Définissez l\'horloge émulée de la 3DS pour qu\'elle corresponde à votre appareil ou démarre à une date et heure simulée.</string>
<string name="device_clock">Horloge de l\'appareil</string>
<string name="simulated_clock">Horloge simulée</string>
<string name="simulated_clock_description">Si l\'horloge est réglée sur « Horloge simulée », cela modifie la date et l\'heure fixes de démarrage.</string>
<string name="profile_settings">Paramètres du profil</string>
<string name="emulated_region">Région</string>
<string name="emulated_language">Langue</string>
@ -173,6 +190,10 @@
<string name="plugin_loader_description">Charge les plugins 3GX à partir de la carte SD émulée s\'ils sont disponibles.</string>
<string name="allow_plugin_loader">Autoriser les applications à modifier l\'état du Plugin Loader</string>
<string name="allow_plugin_loader_description">Autoriser les applications homebrew à activer le Plugin Loader même lorsqu\'il est désactivé.</string>
<string name="region_mismatch">Avertissement d\'incompatibilité de région</string>
<string name="region_mismatch_emulated">Le paramètre de pays n\'est pas valide pour la région émulée sélectionnée.</string>
<string name="region_mismatch_console">Le paramètre de pays n\'est pas valide pour la console actuellement connectée.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Caméra intérieure</string>
<string name="outer_left_camera">Caméra extérieure de gauche</string>
@ -191,6 +212,8 @@
<string name="graphics_api">API graphique</string>
<string name="spirv_shader_gen">Activer la génération de shaders SPIR-V</string>
<string name="spirv_shader_gen_description">Émet le shader de fragment utilisé pour émuler PICA en utilisant SPIR-V plutôt que GLSL</string>
<string name="disable_spirv_optimizer">Désactiver l\'optimiseur SPIR-V</string>
<string name="disable_spirv_optimizer_description">Désactive le passage d\'optimisation SPIR-V, ce qui réduit considérablement les ralentissements sans affecter les performances.</string>
<string name="async_shaders">Activer la compilation asynchrone des shaders</string>
<string name="async_shaders_description">Compile les shaders en arrière-plan pour réduire les saccades pendant le jeu. Lorsqu\'il est activé, prévoyez des problèmes graphiques temporaires.</string>
<string name="linear_filtering">Filtrage linéaire</string>
@ -199,15 +222,24 @@
<string name="texture_filter_description">Améliore l\'aspect visuel des applications en appliquant un filtre aux textures. Les filtres pris en charge sont Anime4K Ultrafast, Bicubique, ScaleForce, xBRZ freescale et MMPX.</string>
<string name="delay_render_thread">Retarde le rendu de thread du jeu</string>
<string name="delay_render_thread_description">Délai le thread de rendu du jeu lorsqu\'il soumet des données au GPU. Cela permet de résoudre les problèmes de performance dans les (très rares) applications avec des fréquences d\'images dynamiques.</string>
<string name="advanced">Avancé</string>
<string name="texture_sampling_name">Échantillonnage de texture</string>
<string name="texture_sampling_description">Remplace le filtre d\'échantillonnage utilisé par les jeux. Cela peut être utile dans certains cas où les jeux se comportent mal lors de la conversion ascendante. En cas de doute, réglez ce paramètre sur « Contrôlé par le jeu ».</string>
<string name="shaders_accurate_mul">Multiplication précise</string>
<string name="shaders_accurate_mul_description">Utilise une multiplication plus précise dans les shaders hardware, ce qui peut corriger certains bugs graphiques. Lorsqu\'elle est activée, la performance sera réduite.</string>
<string name="asynchronous_gpu">Active l\'émulation asynchone du GPU</string>
<string name="asynchronous_gpu_description">Utilise une unité dexécution séparée pour émuler le GPU de manière asynchrone. La performance sera améliorée.</string>
<string name="frame_limit_enable">Limite de vitesse</string>
<string name="frame_limit_enable_description">Une fois activée, la vitesse d\'émulation sera limitée à un pourcentage spécifié de la vitesse normale. Si elle est désactivée, la vitesse d\'émulation ne sera pas limitée et le raccourci clavier turbo ne fonctionnera pas.</string>
<string name="frame_limit_slider">Limiter le pourcentage de vitesse</string>
<string name="frame_limit_slider_description">Définit le taux de limitation de la vitesse d\'émulation. À 100%, par défaut, l\'émulation sera limitée à la vitesse normale. Des valeurs supérieures ou inférieures augmenteront ou diminueront la limite de la vitesse.</string>
<string name="turbo_limit">Turbo Speed Limite</string>
<string name="turbo_limit_description">Limite de vitesse d\'émulation utilisée lorsque la touche de raccourci turbo est active.</string>
<string name="expand_to_cutout_area">Étendre à la zone de découpe</string>
<string name="expand_to_cutout_area_description">Agrandit la zone d\'affichage pour inclure la zone découpée (ou encoche).</string>
<string name="internal_resolution">Résolution interne</string>
<string name="internal_resolution_description">Spécifie la résolution utilisée pour le rendu. Une résolution élevée améliorera considérablement la qualité visuelle, mais est également très coûteuse en termes de performance et peut entraîner des bugs dans certaines applications.</string>
<string name="internal_resolution_setting_auto">Automatique (taille de l\'écran)</string>
<string name="internal_resolution_setting_1x">Native (400x240)</string>
<string name="internal_resolution_setting_2x">2x Native (800x480)</string>
<string name="internal_resolution_setting_3x">3x Native (1200x720)</string>
@ -223,6 +255,7 @@
<string name="stereoscopy">Stéréoscopie</string>
<string name="render3d">Mode 3D stéréoscopique</string>
<string name="factor3d">Profondeur</string>
<string name="factor3d_description">Spécifie la valeur du curseur 3D. Cette valeur doit être supérieure à 0 % lorsque la 3D stéréoscopique est activée. Remarque : les valeurs de profondeur supérieures à 100 % ne sont pas possibles sur du matériel réel et peuvent entraîner des problèmes graphiques.</string>
<string name="disable_right_eye_render">Désactiver le rendu de l\'œil droit</string>
<string name="disable_right_eye_render_description">Améliore considérablement les performances dans certaines applications, mais peut provoquer des scintillements dans d\'autres.</string>
<string name="cardboard_vr">Réalité virtuelle Cardboard</string>
@ -270,14 +303,24 @@
<string name="delay_start_lle_modules_description">Retarde le démarrage de l\'application lorsque les modules LLE sont activés.</string>
<string name="deterministic_async_operations">Opérations asynchrones déterministes</string>
<string name="deterministic_async_operations_description">Rend les opérations asynchrones déterministes pour le débogage. L\'activation de cette fonction peut entraîner des blocages.</string>
<string name="enable_rpc_server">Activer le serveur RPC</string>
<string name="enable_rpc_server_desc">Active le serveur RPC sur le port 45987. Cela permet de lire/écrire à distance la mémoire invitée.</string>
<string name="shader_jit">Activer Shader JIT</string>
<string name="shader_jit_description">Utilisez le moteur JIT à la place de l\'interpréteur pour l\'émulation des shaders logiciels.</string>
<!-- Layout settings strings -->
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Orientation de l\'écran</string>
<string name="layout_screen_orientation_auto_sensor">Auto</string>
<string name="layout_screen_orientation_landscape">Paysage</string>
<string name="layout_screen_orientation_landscape_reverse">Paysage inversé</string>
<string name="layout_screen_orientation_portrait">Portait</string>
<string name="layout_screen_orientation_portrait_reverse">Portait inversé</string>
<string name="aspect_ratio_default">Par défaut</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Étirement</string>
<!-- Miscellaneous -->
<string name="clear">Effacer</string>
@ -285,6 +328,7 @@
<string name="ini_saved">Paramètres sauvegardés</string>
<string name="gameid_saved">Paramètres sauvegardés pour %1$s</string>
<string name="error_saving">Erreur lors de l\'enregistrement de %1$s.ini: %2$s</string>
<string name="saving">Enregistrement...</string>
<string name="loading">Chargement...</string>
<string name="next">Suivant</string>
<string name="back">Retour</string>
@ -305,12 +349,16 @@
<string name="select_rtc_time">Sélectionner l\'heure RTC</string>
<string name="reset_setting_confirmation">Voulez-vous réinitialiser ce paramètre à sa valeur par défaut ?</string>
<string name="setting_not_editable">Vous ne pouvez pas modifier cela maintenant</string>
<string name="setting_disabled">Paramètre désactivé</string>
<string name="setting_disabled_description">Ce paramètre est actuellement désactivé car un autre paramètre n\'a pas la valeur appropriée.</string>
<string name="setting_not_editable_description">Cette option ne peut pas être modifiée pendant qu\'un jeu est lancé.</string>
<string name="auto_select">Sélection Automatique</string>
<string name="start">Démarrer</string>
<string name="cancelling">Annulation...</string>
<string name="important">Important</string>
<string name="dont_show_again">Ne pas montrer à nouveau</string>
<string name="visibility">Visibilité</string>
<string name="information">Information</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Choisir un répertoire de jeu</string>
@ -358,6 +406,7 @@
<string name="emulation_control_dpad_slide_enable">Glissement de la manette +</string>
<string name="emulation_open_settings">Ouvrir les paramètres</string>
<string name="emulation_open_cheats">Accéder aux codes de triche</string>
<string name="emulation_aspect_ratio">Rapport d\'aspect</string>
<string name="emulation_switch_screen_layout">Disposition en mode paysage</string>
<string name="emulation_switch_portrait_layout">Disposition en mode portait</string>
<string name="emulation_screen_layout_largescreen">Écran large</string>
@ -378,6 +427,8 @@
<string name="small_screen_position_bottom_left">En bas à gauche</string>
<string name="small_screen_position_above">Au dessus</string>
<string name="small_screen_position_below">En dessous</string>
<string name="screen_gap">Écart d\'écran</string>
<string name="screen_gap_description">Écart entre les écrans dans tous les modes à deux écrans. Mesuré en px par rapport à la hauteur de 240 px de l\'écran le plus grand.</string>
<string name="large_screen_proportion">Proportions du grand écran</string>
<string name="large_screen_proportion_description">Combien de fois le grand écran est-il plus grand que le petit écran dans la disposition Écran large ?</string>
<string name="emulation_adjust_custom_layout">Ajuster la disposition personnalisée dans les paramètres</string>
@ -391,8 +442,9 @@
<string name="emulation_custom_layout_height">Hauteur</string>
<string name="emulation_cycle_landscape_layouts">Dispositions de cycle</string>
<string name="emulation_swap_screens">Permuter les écrans</string>
<string name="emulation_rotate_upright">Tourner l\'écran à la verticale</string>
<string name="emulation_touch_overlay_reset">Réinitialiser l\'overlay</string>
<string name="emulation_show_overlay">Afficher l\'overlay</string>
<string name="emulation_show_controller_overlay">Afficher l\'overlay du contrôleur</string>
<string name="emulation_close_game">Fermer le jeu</string>
<string name="emulation_toggle_pause">Pause</string>
<string name="miscellaneous">Divers</string>
@ -468,7 +520,52 @@
<!-- About Game Dialog -->
<string name="play">Jouer</string>
<string name="uninstall_cia">Désinstaller l\'application</string>
<string name="uninstalling">Désinstallation...</string>
<string name="game_context_open_save_dir">Ouvrir le dossier de sauvegarde des données</string>
<string name="game_context_open_app">Ouvrir le dossier d\'application</string>
<string name="game_context_open_mods">Ouvrir le dossier Mods</string>
<string name="game_context_open_textures">Ouvrir le dossier Textures</string>
<string name="game_context_open_dlc">Ouvrir le dossier DLC</string>
<string name="game_context_open_updates">Ouvrir le dossier Mises à jour</string>
<string name="game_context_open_extra">Ouvrir le dossier supplémentaire</string>
<string name="game_context_uninstall_dlc">Désinstaller le DLC</string>
<string name="game_context_uninstall_updates">Désinstaller les mises à jour</string>
<string name="shortcut">Raccourci</string>
<string name="shortcut_name">Nom du raccourci</string>
<string name="edit_icon">Modifier l\'icône</string>
<string name="create_shortcut">Créer un raccourci</string>
<string name="shortcut_name_empty">Le nom du raccourci ne peut pas être vide</string>
<string name="shortcut_image_stretch_toggle">Étirer pour ajuster l\'image</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">Afficher l\'overlay des performances</string>
<string name="performance_overlay_options">Overlay des performances</string>
<string name="performance_overlay_enable">Activer l\'overlay des performances</string>
<string name="performance_overlay_options_description">Configurez si l\'overlay des performances doit être affichée et quelles informations doivent être affichées.</string>
<string name="overlay_show_fps">Afficher les FPS</string>
<string name="overlay_show_fps_description">Afficher le nombre d\'images par seconde actuel.</string>
<string name="overlay_show_frametime">Afficher le temps d\'affichage</string>
<string name="overlay_show_frametime_description">Afficher le temps d\'affichage actuel.</string>
<string name="overlay_show_speed">Afficher la vitesse</string>
<string name="overlay_show_speed_description">Afficher le pourcentage actuel de la vitesse d\'émulation.</string>
<string name="overlay_show_app_ram_usage">Afficher l\'utilisation de la mémoire par l\'application</string>
<string name="overlay_show_app_ram_usage_description">Affichez la quantité de RAM utilisée par l\'émulateur.</string>
<string name="overlay_show_available_ram">Afficher la mémoire disponible</string>
<string name="overlay_show_available_ram_description">Afficher la quantité de RAM disponible.</string>
<string name="overlay_show_battery_temp">Afficher la température de la batterie</string>
<string name="overlay_show_battery_temp_description">Afficher la température actuelle de la batterie en degrés Celsius et Fahrenheit.</string>
<string name="overlay_position">Position de l\'overlay</string>
<string name="overlay_position_description">Choisissez l\'emplacement d\'affichage de l\'overlay des performances à l\'écran.</string>
<string name="overlay_position_top_left">En haut à gauche</string>
<string name="overlay_position_top_right">En haut à droite</string>
<string name="overlay_position_bottom_left">En bas à gauche</string>
<string name="overlay_position_bottom_right">En bas à droite</string>
<string name="overlay_position_center_top">Au centre en haut</string>
<string name="overlay_position_center_bottom">Au centre en bas</string>
<string name="overlay_background">Overlay de l\'arrière-plan</string>
<string name="overlay_background_description">Ajoute un arrière-plan derrière l\'overlay pour faciliter la lecture.</string>
<!-- Cheats -->
<string name="cheats">Codes de triche</string>
<string name="cheats_add">Ajouter un code de triche</string>
@ -588,7 +685,11 @@
<string name="xbrz">xBRZ</string>
<string name="mmpx">MMPX</string>
<!-- Texture Sampling names -->
<string name="game_controlled">Contrôlé par le jeu</string>
<string name="nearest_neighbor">Plus proche voisin</string>
<string name="linear">Linéaire</string>
<!-- Sound output modes -->
<string name="mono">Mono</string>
<string name="stereo">Stéreo</string>

View file

@ -18,7 +18,7 @@ Cos\'è questo:
<string name="install_game_content">Installa file CIA</string>
<string name="install_game_content_description">Installa applicazioni, aggiornamenti o DLC</string>
<string name="share_log">Condividi Log</string>
<string name="share_log_description">Condividi il file di log di Azahar per il debug</string>
<string name="share_log_description">Condividi il file di log di Azahar per il debug di problemi</string>
<string name="gpu_driver_manager">Gestione driver GPU</string>
<string name="install_gpu_driver">Installa driver GPU</string>
<string name="install_gpu_driver_description">Installa driver alternativi per possibili miglioramenti nelle performance o nell\'accuratezza</string>
@ -79,14 +79,22 @@ Divertiti usando l\'emulatore!</string>
<string name="permission_denied">Permesso negato</string>
<string name="add_games_warning">Saltare la selezione della cartella applicazioni?</string>
<string name="add_games_warning_description">Non verrà mostrato alcun software nella lista applicazioni se non viene selezionata alcuna cartella.</string>
<string name="permissions">Permessi</string>
<string name="select_emulator_data_folders">Cartella dati</string>
<string name="select_emulator_data_folders_description"><![CDATA[Seleziona la cartella dati<br/>(La cartella utente è richiesta)]]></string>
<string name="permissions_description">Concedere autorizzazioni opzionali per utilizzare specifiche funzionalità dell\'emulatore</string>
<string name="warning_help">Aiuto</string>
<string name="warning_skip">Salta</string>
<string name="warning_cancel">Indietro</string>
<string name="select_citra_user_folder">Seleziona cartella utente</string>
<string name="select_citra_user_folder_description"><![CDATA[Seleziona la tua cartella <a href=\"https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage\">utente</a> usando il bottone sottostante.]]></string>
<string name="select_which_user_directory_to_use">Sembra che tu abbia impostato la cartella utente sia per Lime3DS che per Azahar. Questo probabilmente è dovuto al fatto che hai eseguito l\'aggiornamento ad Azahar e, al momento della richiesta, hai scelto una directory utente diversa da quella utilizzata per Lime3DS.\n\nQuesto potrebbe averti fatto pensare di aver perso salvataggi o altre impostazioni - ci scusiamo se è successo.\n\nDesideri tornare a utilizzare la tua cartella utente originale di Lime3DS, ripristinando impostazioni e salvataggi da Lime3DS, oppure preferisci mantenere la cartella utente attuale di Azahar?\n\nNessuna delle cartelle verrà eliminata, indipendentemente dalla tua scelta, e potrai passare liberamente da una all\'altra utilizzando l\'opzione \"Seleziona Cartella Utente\".</string>
<string name="keep_current_azahar_directory">Mantieni la cartella di Azahar attuale</string>
<string name="use_prior_lime3ds_directory">Usa la cartella precedente di Lime3DS</string>
<string name="select">Seleziona</string>
<string name="cannot_skip">Non puoi saltare questo passaggio</string>
<string name="cannot_skip">Non puoi saltare la configurazione della cartella utente</string>
<string name="cannot_skip_directory_description">Questo passaggio è richiesto per permettere che Azahar funzioni. Quando la cartella verrà selezionata potrai continuare.</string>
<string name="selecting_user_directory_without_write_permissions">Hai perso i permessi di scrittura sulla tua <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">cartella dei dati utente</a>, dove sono memorizzati i salvataggi e altre informazioni. Questo può accadere dopo alcuni aggiornamenti app o Android. Ri-seleziona la cartella per recuperare le autorizzazioni in modo da poter continuare.</string>
<string name="set_up_theme_settings">Impostazioni tema</string>
<string name="setup_theme_settings_description">Configura le impostazioni del tema di Azahar.</string>
<string name="setup_set_theme">Imposta tema</string>
@ -123,13 +131,19 @@ Divertiti usando l\'emulatore!</string>
<string name="input_binding_description_horizontal_axis">Muovi il joystick a sinistra o a destra.</string>
<string name="button_home">Home</string>
<string name="button_swap">Inverti Schermi</string>
<string name="button_turbo">Turbo</string>
<string name="input_message_analog_only">Questo controllo dev\'essere assegnato ad uno stick analogico di un gamepad o ad un asse del Pad Direzionale!</string>
<string name="input_message_button_only">Questo controllo dev\'essere assegnato a un pulsante del gamepad!</string>
<string name="turbo_limit_hotkey">Turbo speed</string>
<string name="turbo_enabled_toast">\"Turbo speed\" abilitato</string>
<string name="turbo_disabled_toast">\"Turbo speed\" disabilitato</string>
<!-- System files strings -->
<string name="setup_system_files">File di Sistema</string>
<string name="setup_system_files_description">Esegui operazioni sui file di sistema come installare file di sistema o avviare il Menu Home</string>
<string name="setup_tool_connect">Connettiti a Artic Setup Tool </string>
<string name="setup_system_files_detect">Ottenendo lo stato attuale dei file di sistema, per favore attendi...</string>
<string name="setup_system_files_preamble"><![CDATA[Azahar necessita di dati unici della console e file firmware provenienti da una console reale per poter utilizzare alcune delle sue funzionalità. Questi file e dati possono essere configurati con <a href=https://github.com/azahar-emu/ArticSetupTool>Azahar Artic Setup Tool</a>.<br>Note: <ul><li><b>Questa operazione installerà dati unici della console su Azahar, non condividere le tue cartelle utente o NAND dopo aver completato il processo di configurazione!</b></li><li>Durante il processo di configurazione, Azahar si collegherà alla console che sta eseguendo lo strumento di configurazione. Puoi scollegare la console in seguito dalla scheda \"File di sistema\" nel menu delle opzioni dell\'emulatore.</li><li>Non andare online contemporaneamente con Azahar e la tua console 3DS dopo aver configurato i file di sistema, poiché ciò potrebbe causare problemi.</li><li>La configurazione del vecchio 3DS è necessaria affinché la configurazione del nuovo 3DS funzioni (si consiglia di configurare entrambi).</li><li>Entrambe le modalità di configurazione funzioneranno indipendentemente dal modello della console che esegue lo strumento di configurazione.</li></ul>]]></string>
<string name="setup_system_files_detect">Recupero dello stato attuale dei file di sistema, per favore attendi...</string>
<string name="setup_system_files_o3ds">Setup Old 3DS</string>
<string name="setup_system_files_n3ds">Setup New 3DS</string>
<string name="setup_system_files_possible">Il setup è possibile.</string>
@ -158,6 +172,7 @@ Divertiti usando l\'emulatore!</string>
<string name="init_clock_description">Scegli se l\'orologio di sistema del 3DS emulato dovrà rispecchiare l\'orario del tuo dispositivo o se dovrà indicare una data e ora in particolare.</string>
<string name="device_clock">Orologio del dispositivo</string>
<string name="simulated_clock">Orologio simulato</string>
<string name="simulated_clock_description">Se l\'orologio è impostato su \"Orologio simulato\", questo cambia la data e l\'ora di inizio.</string>
<string name="profile_settings">Impostazioni profilo</string>
<string name="emulated_region">Regione</string>
<string name="emulated_language">Lingua</string>
@ -178,6 +193,10 @@ Divertiti usando l\'emulatore!</string>
<string name="plugin_loader_description">Carica i plugin 3GX dalla scheda SD emulata, se disponibili.</string>
<string name="allow_plugin_loader">Consenti alle applicazioni di cambiare lo stato del Plugin Loader</string>
<string name="allow_plugin_loader_description">Permetti alle app homebrew di abilitare il Plugin Loader anche quando è disabilitato.</string>
<string name="region_mismatch">Mancata corrispondenza della regione</string>
<string name="region_mismatch_emulated">L\'impostazione del paese non è valida per la regione emulata selezionata.</string>
<string name="region_mismatch_console">L\'impostazione del paese non è valida per la console attualmente collegata.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Fotocamera Interna</string>
<string name="outer_left_camera">Fotocamera Esterna di Sinistra</string>
@ -196,23 +215,33 @@ Divertiti usando l\'emulatore!</string>
<string name="graphics_api">API grafiche</string>
<string name="spirv_shader_gen">Abilita la generazione di shader SPIR-V</string>
<string name="spirv_shader_gen_description">Crea le fragments shader usate per emulare PICA tramite SPIR-V, invece di GLSL</string>
<string name="disable_spirv_optimizer">Disabilita SPIR-V Optimizer</string>
<string name="disable_spirv_optimizer_description">Disabilita il passaggio di ottimizzazione SPIR-V, riducendo considerevolmente gli stutter e influendo appena sulle prestazioni.</string>
<string name="async_shaders">Abilita la compilazione asincrona delle shader</string>
<string name="async_shaders_description">Compila le shader in background per ridurre lo stuttering durante il gameplay. Quando abilitato, potrebbero verificarsi dei glitch grafici.</string>
<string name="async_shaders_description">Compila le shader in background per ridurre lo stuttering durante il gioco. Quando abilitato, potrebbero verificarsi dei glitch grafici.</string>
<string name="linear_filtering">Filtering Lineare</string>
<string name="linear_filtering_description">Abilita il filtro lineare, che fa sembrare più smussata la grafica dei giochi.</string>
<string name="linear_filtering_description">Abilita il filtraggio lineare, che fa sembrare più smussata la grafica dei giochi.</string>
<string name="texture_filter_name">Filtro Texture</string>
<string name="texture_filter_description">Migliora la grafica delle applicazioni applicando un filtro alle texture. I filtri supportati sono Anime4k Ultrafast, Bicubic, ScaleForce, xBRZ freescale e MMPX.</string>
<string name="delay_render_thread">Ritarda il thread di rendering del gioco</string>
<string name="delay_render_thread_description">Ritarda il thread di rendering del gioco quando invia dati alla GPU. Aiuta con i problemi di prestazioni nelle (poche) applicazioni con frame rate dinamici.</string>
<string name="advanced">Avanzato</string>
<string name="texture_sampling_name">Campionamento texture</string>
<string name="texture_sampling_description">Sovrascrive il filtro di campionamento utilizzato dai giochi. Questo può essere utile in alcuni casi con giochi che gestiscono male l\'upscaling. Se hai dubbi, imposta questa opzione su \"Gestito dal gioco\".</string>
<string name="shaders_accurate_mul">Moltiplicazione Accurata</string>
<string name="shaders_accurate_mul_description">Utilizza una moltiplicazione più accurata degli shader hardware, che potrebbe correggere alcuni bug grafici. Se abilitato, le prestazioni saranno ridotte.</string>
<string name="asynchronous_gpu">Abilita emulazione GPU asincrona</string>
<string name="asynchronous_gpu_description">Utilizza un thread separato per emulare la GPU in differita. Se abilitato, le prestazioni miglioreranno.</string>
<string name="asynchronous_gpu">Abilita l\'emulazione GPU asincrona</string>
<string name="asynchronous_gpu_description">Usa un thread separato per l\'emulazione asincrona della GPU. Quando è abilitato le prestazioni saranno migliori.</string>
<string name="frame_limit_enable">Limita Velocità</string>
<string name="frame_limit_enable_description">Quando abilitata, la velocità di emulazione sarà limitata a una percentuale specificata della velocità normale. Se disabilitato, la velocità di emulazione non sarà limitata e tasto di scelta rapida per \"Turbo speed\" non funzionerà.</string>
<string name="frame_limit_slider">Limita Velocità tramite Percentuale</string>
<string name="frame_limit_slider_description">Specifica a quale percentuale limitare la velocità d\'emulazione. Utilizzando l\'impostazione predefinita di 100% l\'emulazione sarà limitata alla velocità normale. Valori superiori o inferiori aumenteranno o diminuiranno il limite di velocità.</string>
<string name="turbo_limit">Limite \"Turbo speed\"</string>
<string name="turbo_limit_description">Limite di velocità dell\'emulazione usato quando il tasto di scelta rapida del turbo è attivo.</string>
<string name="expand_to_cutout_area">Espandi all\'area di ritaglio</string>
<string name="expand_to_cutout_area_description">Espande l\'area di visualizzazione per includere l\'area di ritaglio (o notch).</string>
<string name="internal_resolution">Risoluzione Interna</string>
<string name="internal_resolution_description">Specifica la risoluzione a cui renderizzare. Una risoluzioe alta migliorerà la qualità visiva ma avrà un grande effetto sulle performance e potrebbe causare glitch in alcune applicazioni.</string>
<string name="internal_resolution_description">Specifica la risoluzione a cui renderizzare. Una risoluzione alta migliorerà la qualità visiva ma avrà un grande effetto sulle prestazioni e potrebbe causare glitch in alcune applicazioni.</string>
<string name="internal_resolution_setting_1x">Nativa (400x240)</string>
<string name="internal_resolution_setting_2x">2x Nativa (800x480)</string>
<string name="internal_resolution_setting_3x">3x Nativa (1200x720)</string>
@ -223,20 +252,21 @@ Divertiti usando l\'emulatore!</string>
<string name="internal_resolution_setting_8x">8x Nativa (3200x1920)</string>
<string name="internal_resolution_setting_9x">9x Nativa (3600x2160)</string>
<string name="internal_resolution_setting_10x">10x Nativa (4000x2400)</string>
<string name="performance_warning">Disabilitare questa impostazione riducerà significativamente le performance dell\'emulazione! Per un\'esperienza migliore, è consigliato lasciare questa impostazione abilitata.</string>
<string name="performance_warning">Disabilitare questa impostazione riducerà significativamente le prestazioni dell\'emulazione! Per un\'esperienza migliore, è consigliato lasciare questa impostazione abilitata.</string>
<string name="debug_warning">Attenzione: Modificare queste impostazioni rallenterà l\'emulazione</string>
<string name="stereoscopy">Stereoscopia</string>
<string name="render3d">Modalità Stereoscopia 3D</string>
<string name="factor3d">Profondità</string>
<string name="factor3d_description">Specifica il valore del regolatore di profindità 3D. Questo valore deve essere impostato su un valore superiore allo 0% quando è abilitato il \"3D stereoscopico\".\nNote: Valori di profondità superiori al 100% non sono possibili su hardware reale e possono causare problemi grafici</string>
<string name="disable_right_eye_render">Disabilita il rendering dell\'occhio destro</string>
<string name="disable_right_eye_render_description">Migliora notevolmente le prestazioni in alcune applicazioni, ma può causare flickering in altre.</string>
<string name="cardboard_vr">Cardboard VR</string>
<string name="cardboard_screen_size">Grandezza Cardboard</string>
<string name="cardboard_screen_size_description">Scala lo schermo ad una percentuale fissata della sua grandezza originale</string>
<string name="cardboard_x_shift">Spostamento in Orizzontale</string>
<string name="cardboard_x_shift_description">Specifica la percentuale dello schermo che contiene uno spazio vuoto per shiftare lo schermo orizzontalmente. Valori positivi muoveranno i due occhi al centro dello schermo, mentre i negativi faranno il contrario</string>
<string name="cardboard_x_shift_description">Specifica la percentuale di spazio vuoto per spostare gli schermi orizzontalmente. Valori positivi muoveranno i due schermi al centro dello schermo, mentre i negativi faranno il contrario.</string>
<string name="cardboard_y_shift">Spostamento Verticale</string>
<string name="cardboard_y_shift_description">Specifica la percentuale dello schermo che contiene uno spazio vuoto per spostare lo schermo in verticale. Valori positivi muoveranno alla parte bassa dello schermo, mentre i negativi faranno il contrario.</string>
<string name="cardboard_y_shift_description">Specifica la percentuale di spazio vuoto per spostare gli schermi verticalmente. Valori positivi muoveranno alla parte bassa dello schermo, mentre i negativi faranno il contrario.</string>
<string name="use_shader_jit">Shader JIT</string>
<string name="use_disk_shader_cache">Shader Cache su Disco</string>
<string name="use_disk_shader_cache_description">Riduce lo stuttering salvando e caricando le shader generate sul disco principale. Non può essere usato senza aver prima attivato \"Abilita Shader Hardware\"</string>
@ -246,9 +276,9 @@ Divertiti usando l\'emulatore!</string>
<string name="custom_textures">Textures Personalizzate</string>
<string name="custom_textures_description">Le texture vengono caricate da load/textures/[ID Gioco]/.</string>
<string name="preload_textures">Precaricamento delle Textures Personalizzate</string>
<string name="preload_textures_description">Carica tutte le texture personalizzate nella memoria RAM del dispositivo. Potrebbe comportare un uso eccessivamente alto della memoria.</string>
<string name="async_custom_loading">Caricamento delle Textures Asincrono</string>
<string name="async_custom_loading_description">Carica le texture personalizzate in modo asincrono e in background. Riduce lo stutter.</string>
<string name="preload_textures_description">Carica tutte le texture personalizzate nella RAM del dispositivo. Questa funzionalità può usare molta memoria.</string>
<string name="async_custom_loading">Caricamento asincrono delle Textures</string>
<string name="async_custom_loading_description">Carica le texture personalizzate in modo asincrono con i thread in background per ridurre lo stutter del caricamento.</string>
<!-- Audio settings strings -->
<string name="audio_volume">Volume</string>
@ -268,21 +298,31 @@ Divertiti usando l\'emulatore!</string>
<string name="vsync">Abilita V-Sync</string>
<string name="vsync_description">Sincronizza il frame rate dei giochi con il refresh rate del tuo dispositivo.</string>
<string name="renderer_debug">Renderer di Debug</string>
<string name="renderer_debug_description">Logga informazioni di debug riguardante la grafica. Se abilitato, le performance del software emulato diminuiranno drasticamente</string>
<string name="renderer_debug_description">Registra ulteriori informazioni di debug relative alla grafica. Quando abilitata, le prestazioni del gioco saranno significativamente ridotte.</string>
<string name="instant_debug_log">Svuota l\'output del log ad ogni messaggio</string>
<string name="instant_debug_log_description">Invia immediatamente il log di debug al file. Usalo se Azahar si blocca e l\'output del log viene tagliato.</string>
<string name="delay_start_lle_modules">Ritarda l\'avvio con moduli LLE</string>
<string name="delay_start_lle_modules_description">Ritarda l\'avvio dell\'app quando i moduli LLE sono abilitati.</string>
<string name="deterministic_async_operations">Operazioni Deterministiche desincronizzate</string>
<string name="deterministic_async_operations_description">Rende le operazioni asincrone deterministiche per il debug. Abilitare questa opzione potrebbe causare blocchi.</string>
<string name="enable_rpc_server">Abilita server RPC</string>
<string name="enable_rpc_server_desc">Abilita il server RPC sulla porta 45987. Questo permette di leggere e scrivere remotamente la memoria guest.</string>
<string name="shader_jit">Abilita shader JIT</string>
<string name="shader_jit_description">Usa il motore JIT invece dell\'interprete per l\'emulazione di shader software.</string>
<!-- Layout settings strings -->
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Orientamento schermo</string>
<string name="layout_screen_orientation_auto_sensor">Automatico</string>
<string name="layout_screen_orientation_landscape">Orizzontale</string>
<string name="layout_screen_orientation_landscape_reverse">Orizzontale rovesciato</string>
<string name="layout_screen_orientation_portrait">Verticale</string>
<string name="layout_screen_orientation_portrait_reverse">Verticale rovesciato</string>
<string name="aspect_ratio_default">Default</string>
<string name="aspect_ratio_16_9">16:9</string>
<string name="aspect_ratio_4_3">4:3</string>
<string name="aspect_ratio_21_9_fullscreen">21:9</string>
<string name="aspect_ratio_16_10_fullscreen_stretched">16:10</string>
<string name="aspect_ratio_stretch">Allunga</string>
<!-- Miscellaneous -->
<string name="clear">Ripristina</string>
@ -290,6 +330,7 @@ Divertiti usando l\'emulatore!</string>
<string name="ini_saved">Impostazioni salvate</string>
<string name="gameid_saved">Impostazioni salvate per %1$s</string>
<string name="error_saving">Errore di salvataggio %1$s.ini: %2$s</string>
<string name="saving">Salvataggio...</string>
<string name="loading">Caricamento...</string>
<string name="next">Prossimo</string>
<string name="back">Indietro</string>
@ -310,19 +351,23 @@ Divertiti usando l\'emulatore!</string>
<string name="select_rtc_time">Seleziona orario RTC</string>
<string name="reset_setting_confirmation">Vuoi reimpostare questa impostazione al suo valore standard?</string>
<string name="setting_not_editable">Non puoi modificare questo ora</string>
<string name="setting_disabled">Impostazione disabilitata</string>
<string name="setting_disabled_description">Questa impostazione è attualmente disattivata a causa di un\'altra impostazione che non è il valore appropriato.</string>
<string name="setting_not_editable_description">Questa opzione non può essere modificata mentre un gioco è in esecuzione.</string>
<string name="auto_select">Auto-seleziona.</string>
<string name="start">Avvia</string>
<string name="cancelling">Cancellazione...</string>
<string name="important">Importante</string>
<string name="dont_show_again">Non mostrare più</string>
<string name="visibility">Visibilità</string>
<string name="information">Informazione</string>
<!-- Add Directory Screen-->
<string name="select_game_folder">Seleziona cartella dei giochi</string>
<!-- Game Properties -->
<string name="properties">Propietà</string>
<string name="properties_not_loaded">Impossibile caricare le proprietà di questo gioco.</string>
<string name="properties">Proprietà</string>
<string name="properties_not_loaded">Impossibile caricare le proprietà del gioco.</string>
<!-- Preferences Screen -->
<string name="preferences_settings">Impostazioni</string>
@ -337,7 +382,7 @@ Divertiti usando l\'emulatore!</string>
<string name="preferences_layout">Layout</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">La tua ROM è Criptata!</string>
<string name="loader_error_encrypted">La tua ROM è Criptata</string>
<string name="loader_error_invalid_format">Formato ROM non valido</string>
<string name="loader_error_file_not_found">Il file ROM non esiste</string>
<string name="no_game_present">Nessun gioco avviabile è presente!</string>
@ -397,7 +442,6 @@ Divertiti usando l\'emulatore!</string>
<string name="emulation_cycle_landscape_layouts">Rotazione Layout</string>
<string name="emulation_swap_screens">Inverti Schermi</string>
<string name="emulation_touch_overlay_reset">Ripristina Disposizione</string>
<string name="emulation_show_overlay">Mostra Controlli di gioco</string>
<string name="emulation_close_game">Chiudi il Gioco</string>
<string name="emulation_toggle_pause">Abilita/disabilita Pausa</string>
<string name="miscellaneous">Miscellanea</string>
@ -409,7 +453,7 @@ Divertiti usando l\'emulatore!</string>
<string name="menu_emulation_amiibo_remove">Rimuovi</string>
<string name="select_amiibo">Seleziona il file contenente il tuo Amiibo.</string>
<string name="amiibo_load_error">Impossibile caricare l\'Amiibo</string>
<string name="amiibo_load_error_message">Durante il caricamento di un file Amiibo, si è verificato un errore. Controlla che il file sia corretto.</string>
<string name="amiibo_load_error_message">Durante il caricamento del file Amiibo specificato, si è verificato un errore. Controlla che il file sia corretto.</string>
<string name="pause_emulation">Metti in pausa emulazione</string>
<string name="resume_emulation">Riprendi emulazione</string>
<string name="lock_drawer">Blocca cassetto</string>
@ -437,8 +481,8 @@ Divertiti usando l\'emulatore!</string>
<string name="i_forgot">L\'ho Dimenticato</string>
<string name="fixed_length_required">La lunghezza del testo non è corretta (deve essere di %d caratteri)</string>
<string name="max_length_exceeded">Il testo è troppo lungo (non deve essere più lungo di %d caratteri)</string>
<string name="blank_input_not_allowed">Non è consentito lasciarlo vuoto</string>
<string name="empty_input_not_allowed">Non è consentito lasciarlo vuoto</string>
<string name="blank_input_not_allowed">Non è permesso lasciare il campo vuoto</string>
<string name="empty_input_not_allowed">Non è permesso lasciare il campo vuoto</string>
<string name="invalid_input">Input non valido</string>
<!-- Mii Selector -->
@ -459,11 +503,11 @@ Divertiti usando l\'emulatore!</string>
<string name="continue_button">Continua</string>
<string name="system_archive_not_found">Archivio di Sistema Non Trovato</string>
<string name="system_archive_not_found_message">%s è mancante. Fai il dump del tuo archivio di sistema.\nProseguire con l\'emulazione potrebbe causare crash e bugs</string>
<string name="cia_file_not_found">Installazione Fallita. Impossibile trovare il file .CIA specificato.</string>
<string name="cia_file_not_found">Installazione Fallita. File CIA non trovato</string>
<string name="system_archive_general">Archivio di Sistema</string>
<string name="save_load_error">Errore nel Salvataggio/Caricamento</string>
<string name="fatal_error">Errore Fatale</string>
<string name="fatal_error_message">Consulta il log per i dettagli.\nContinuare con l\'emulazione potrebbe causare un crash.</string>
<string name="fatal_error_message">Si è verificato un errore fatale. Controllare il log per i dettagli.\nContinuare l\'emulazione può causare crash e bug.</string>
<string name="invalid_region">Regione non valida</string>
<string name="unsupported_encrypted">Applicazione criptata non supportata</string>
@ -473,7 +517,39 @@ Divertiti usando l\'emulatore!</string>
<!-- About Game Dialog -->
<string name="play">Riproduci</string>
<string name="uninstall_cia">Disinstalla applicazione</string>
<string name="uninstalling">Disinstallazione...</string>
<string name="game_context_open_textures">Apri cartella delle texture</string>
<string name="game_context_open_dlc">Apri catella DLC</string>
<string name="game_context_open_updates">Apri cartella degli aggiornamenti</string>
<string name="game_context_uninstall_dlc">Disinstalla DLC</string>
<string name="game_context_uninstall_updates">Disinstalla aggiornamenti</string>
<string name="shortcut">Scorciatoia</string>
<string name="shortcut_name">Nome della scorciatoia</string>
<string name="edit_icon">Modifica icona</string>
<string name="create_shortcut">Crea scorciatoia</string>
<string name="shortcut_name_empty">Il nome della scorciatoia non può essere vuoto</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">Mostra overlay prestazioni</string>
<string name="performance_overlay_enable">Abilita overlay prestazioni</string>
<string name="performance_overlay_options_description">Configura se l\'overlay delle prestazioni viene visualizzato e quali informazioni vengono visualizzate.</string>
<string name="overlay_show_fps">Mostra FPS</string>
<string name="overlay_show_fps_description">Mostra i fotogrammi al secondo attuali.</string>
<string name="overlay_show_frametime">Mostra il frametime</string>
<string name="overlay_show_frametime_description">Mostra il frametime attuale.</string>
<string name="overlay_show_speed">Mostra velocità</string>
<string name="overlay_show_speed_description">Mostra la percentuale di emulazione attuale.</string>
<string name="overlay_show_app_ram_usage">Mostra utilizzo della memoria dell\'app</string>
<string name="overlay_show_app_ram_usage_description">Mostra la quantità di RAM usata dall\'emulatore.</string>
<string name="overlay_show_available_ram">Mostra memoria disponibile</string>
<string name="overlay_show_available_ram_description">Mostra la quantità di RAM disponibile.</string>
<string name="overlay_show_battery_temp">Mostra temperatura batteria</string>
<string name="overlay_show_battery_temp_description">Mostra la temperatura attuale, in Celsius e Fahrenheit, della batteria.</string>
<string name="overlay_position">Posizione overlay</string>
<string name="overlay_position_description">Scegli dove visualizzare l\'overlay delle prestazioni sullo schermo.</string>
<string name="overlay_background">Sfondo dell\'overlay</string>
<string name="overlay_background_description">Aggiunge uno sfondo dietro all\'overlay per una lettura più facile.</string>
<!-- Cheats -->
<string name="cheats">Trucchi</string>
<string name="cheats_add">Aggiungi Trucco</string>
@ -491,13 +567,13 @@ Divertiti usando l\'emulatore!</string>
<plurals name="cia_install_toast">
<item quantity="one">Installando %d file. Guarda le notifiche per maggiori dettagli.</item>
<item quantity="many">Installando %dfiles. Guarda le notifiche per maggiori dettagli.</item>
<item quantity="other">Installando %d files. Guarda le notifiche per maggiori dettagli.</item>
<item quantity="other">Installando i file di %d. Guarda le notifiche per maggiori dettagli.</item>
</plurals>
<string name="cia_install_notification_channel_description">Notifiche di Azahar durante l\'installazione dei CIA</string>
<string name="cia_install_notification_title">Installando il CIA</string>
<string name="cia_install_notification_installing">Installazione %1$s (%2$d/%3$d)</string>
<string name="cia_install_notification_success_title">CIA installato con successo</string>
<string name="cia_install_notification_error_title">Errore nell\'installazione del file CIA.</string>
<string name="cia_install_notification_error_title">Errore nell\'installazione del file CIA</string>
<string name="cia_install_success">\"%s\" è stato installato con successo</string>
<string name="cia_install_error_aborted">L\'installazione di \"%s\" è stata annullata.\n Consulta i log per maggiori dettagli</string>
<string name="cia_install_error_invalid">\"%s\" non è un CIA valido</string>
@ -593,6 +669,8 @@ Divertiti usando l\'emulatore!</string>
<string name="xbrz">xBRZ</string>
<string name="mmpx">MMPX</string>
<!-- Texture Sampling names -->
<string name="game_controlled">Controllata dal gioco</string>
<string name="nearest_neighbor">Nearest Neighbor</string>
<!-- Sound output modes -->
<string name="mono">Mono</string>
@ -749,7 +827,7 @@ Divertiti usando l\'emulatore!</string>
<string name="december">Dicembre</string>
<!-- Artic base -->
<string name="artic_server_comm_error">Fallimento nella comunicazione con il server Artic Base. L\'emulazione verrà interrotta</string>
<string name="artic_server_comm_error">Comunicazione con il server Artic Base fallita. L\'emulazione verrà interrotta</string>
<string name="artic_base">Artic Base</string>
<string name="artic_base_connect_description">Connettiti a una console reale che sta eseguendo il server Artic Base</string>
<string name="artic_base_connect">Connetti ad Artic Base</string>
@ -760,6 +838,6 @@ Divertiti usando l\'emulatore!</string>
<string name="emulation_quicksave">Salvataggio Rapido</string>
<string name="emulation_quickload">Caricamento Rapido</string>
<string name="emulation_occupied_quicksave_slot">Salvataggio Rapido - %1$tF %1$tR</string>
<string name="quickload_not_found">Nessun Salvataggio Rapido Disponibile</string>
<string name="quickload_not_found">Nessun salvataggio rapido disponibile</string>
</resources>

View file

@ -91,7 +91,6 @@
<string name="emulation_screen_layout_sidebyside">Side ved Side Skjermer</string>
<string name="emulation_swap_screens">Bytt Skjerm</string>
<string name="emulation_touch_overlay_reset">Tilbakestill Overlegg</string>
<string name="emulation_show_overlay">Vis Overlegg</string>
<string name="emulation_close_game">Lukk Spill</string>
<string name="emulation_close_game_message">Er du sikker på at du vil lukke det nåværende spillet?</string>
<string name="menu_emulation_amiibo">Amiibo</string>

View file

@ -227,6 +227,7 @@
<color name="citra_surfaceTint_gray">#B7B7B7</color>
<!-- Common Colors Across All Themes -->
<color name="citra_transparent_black">#80000000</color>
<color name="citra_outlineVariant">#C6C5D0</color>
<color name="citra_error">#FFB4AB</color>
<color name="citra_errorContainer">#93000A</color>

View file

@ -64,7 +64,6 @@ Vink deze optie in de toekomst nogmaals aan om te zien of er ondersteuning is to
<string name="warning_cancel">Annuleren</string>
<string name="select_citra_user_folder">Selecteer Gebruiker map</string>
<string name="select">Selecteer</string>
<string name="cannot_skip">Je kunt deze stap niet overslaan</string>
<string name="cannot_skip_directory_description">Deze stap is vereist om Azahar te laten werken. Selecteer een map en u kunt doorgaan</string>
<string name="set_up_theme_settings">Thema instellingen</string>
<string name="setup_set_theme">Thema instellen</string>

View file

@ -78,7 +78,6 @@
<string name="select_citra_user_folder">Välj användarmapp</string>
<string name="select_citra_user_folder_description"><![CDATA[Välj din <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">användardatakatalog</a> med knappen nedan.]]></string>
<string name="select">Välj</string>
<string name="cannot_skip">Du kan inte hoppa över det här steget</string>
<string name="cannot_skip_directory_description">Detta steg krävs för att Azahar ska fungera. Välj en katalog och sedan kan du fortsätta.</string>
<string name="set_up_theme_settings">Temainställningar</string>
<string name="setup_theme_settings_description">Konfigurera dina temapreferenser för Azahar.</string>
@ -268,7 +267,6 @@
<string name="delay_start_lle_modules_description">Fördröjer starten av appen när LLE-moduler är aktiverade.</string>
<string name="deterministic_async_operations">Deterministiska asynkrona operationer</string>
<string name="deterministic_async_operations_description">Gör asynkrona operationer deterministiska för felsökning. Om du aktiverar detta kan det orsaka frysningar.</string>
<!-- Layout settings strings -->
<string name="layout_screen_orientation">Skärmorientering</string>
<string name="layout_screen_orientation_auto_sensor">Automatisk</string>
@ -276,7 +274,6 @@
<string name="layout_screen_orientation_landscape_reverse">Omvänd liggande</string>
<string name="layout_screen_orientation_portrait">Stående</string>
<string name="layout_screen_orientation_portrait_reverse">Omvänd stående</string>
<!-- Miscellaneous -->
<string name="clear">Töm</string>
<string name="slider_default">Standard</string>
@ -387,7 +384,6 @@
<string name="emulation_cycle_landscape_layouts">Växla layouter</string>
<string name="emulation_swap_screens">Skärmbyte</string>
<string name="emulation_touch_overlay_reset">Återställ överlägg</string>
<string name="emulation_show_overlay">Visa överlägg</string>
<string name="emulation_close_game">Stäng spelet</string>
<string name="emulation_toggle_pause">Växla paus</string>
<string name="miscellaneous">Diverse</string>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.V35.Citra" parent="Theme.Citra">
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
<style name="Theme.Citra.Main" parent="Theme.V35.Citra" />
</resources>

View file

@ -63,6 +63,24 @@
<item>7</item>
</integer-array>
<string-array name="aspectRatioNames">
<item>@string/aspect_ratio_default</item>
<item>@string/aspect_ratio_16_9</item>
<item>@string/aspect_ratio_4_3</item>
<item>@string/aspect_ratio_21_9_fullscreen</item>
<item>@string/aspect_ratio_16_10_fullscreen_stretched</item>
<item>@string/aspect_ratio_stretch</item>
</string-array>
<integer-array name="aspectRatioValues">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</integer-array>
<string-array name="regionNames">
<item>@string/auto_select</item>
<item>@string/system_region_jpn</item>
@ -115,6 +133,23 @@
<item>11</item>
</integer-array>
<string-array name="statsPosition">
<item>@string/overlay_position_top_left</item>
<item>@string/overlay_position_center_top</item>
<item>@string/overlay_position_top_right</item>
<item>@string/overlay_position_bottom_left</item>
<item>@string/overlay_position_center_bottom</item>
<item>@string/overlay_position_bottom_right</item>
</string-array>
<integer-array name="statsPositionValues">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</integer-array>
<string-array name="n3dsButtons">
<item>@string/button_a</item>
<item>@string/button_b</item>

View file

@ -222,6 +222,7 @@
<color name="citra_surfaceTint_gray">#9E9E9E</color>
<!-- Common Colors Across All Themes -->
<color name="citra_transparent_black">#80000000</color>
<color name="citra_outlineVariant">#C6C5D0</color>
<color name="citra_error">#BA1A1A</color>
<color name="citra_errorContainer">#FFDAD6</color>

Some files were not shown because too many files have changed in this diff Show more