Merge branch 'main' into shader_recompiler/format

This commit is contained in:
georgemoralis 2024-08-29 10:18:12 +03:00 committed by GitHub
commit 18e95ae4c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
138 changed files with 24513 additions and 1242 deletions

View File

@ -19,8 +19,12 @@ chmod a+x linuxdeploy-x86_64.AppImage
chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage
chmod a+x linuxdeploy-plugin-checkrt-x86_64.sh
# Build AppImage
./linuxdeploy-x86_64.AppImage --appdir AppDir
./linuxdeploy-plugin-checkrt-x86_64.sh --appdir AppDir
cp -a "$GITHUB_WORKSPACE/build/translations" AppDir/usr/bin
./linuxdeploy-x86_64.AppImage --appdir AppDir -d "$GITHUB_WORKSPACE"/.github/shadps4.desktop -e "$GITHUB_WORKSPACE"/build/shadps4 -i "$GITHUB_WORKSPACE"/.github/shadps4.png --plugin qt --output appimage
mv Shadps4-x86_64.AppImage Shadps4-qt.AppImage

View File

@ -23,7 +23,7 @@ jobs:
- name: Install misc packages
run: >
sudo apt-get update && sudo apt install libx11-dev libxext-dev libwayland-dev libfuse2 clang build-essential qt6-base-dev
sudo apt-get update && sudo apt install libx11-dev libxext-dev libwayland-dev libfuse2 clang build-essential qt6-base-dev qt6-tools-dev
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_QT_GUI=ON

View File

@ -38,7 +38,7 @@ jobs:
host: mac
target: desktop
arch: clang_64
archives: qtbase
archives: qtbase qttools
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DENABLE_QT_GUI=ON
@ -50,6 +50,7 @@ jobs:
run: |
mkdir upload
mv ${{github.workspace}}/build/shadps4.app upload
mv ${{github.workspace}}/build/translations upload
macdeployqt upload/shadps4.app
tar cf shadps4-macos-qt.tar.gz -C upload .

View File

@ -28,7 +28,7 @@ jobs:
host: windows
target: desktop
arch: win64_msvc2019_64
archives: qtbase
archives: qtbase qttools
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -T ClangCL -DENABLE_QT_GUI=ON
@ -40,6 +40,7 @@ jobs:
run: |
mkdir upload
move build/Release/shadPS4.exe upload
move build/translations upload
windeployqt --dir upload upload/shadPS4.exe
- name: Upload executable

View File

@ -95,10 +95,6 @@ check_symbol_exists(pthread_mutex_timedlock "pthread.h" HAVE_PTHREAD_MUTEX_TIMED
if(HAVE_PTHREAD_MUTEX_TIMEDLOCK OR WIN32)
add_compile_options(-DHAVE_PTHREAD_MUTEX_TIMEDLOCK)
endif()
check_symbol_exists(sem_timedwait "semaphore.h" HAVE_SEM_TIMEDWAIT)
if(HAVE_SEM_TIMEDWAIT OR WIN32)
add_compile_options(-DHAVE_SEM_TIMEDWAIT)
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
# libc++ requires -fexperimental-library to enable std::jthread and std::stop_token support.
@ -113,11 +109,27 @@ add_subdirectory(externals)
include_directories(src)
if(ENABLE_QT_GUI)
find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent)
find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent LinguistTools Network)
qt_standard_project_setup()
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(QT_TRANSLATIONS "${PROJECT_SOURCE_DIR}/src/qt_gui/translations")
file(GLOB_RECURSE TRANSLATIONS_TS ${QT_TRANSLATIONS}/*.ts)
set_source_files_properties(${TRANSLATIONS_TS} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
qt_add_translation(TRANSLATIONS_QM ${TRANSLATIONS_TS})
set(TRANSLATIONS_QRC ${CMAKE_CURRENT_BINARY_DIR}/translations/translations.qrc)
file(WRITE ${TRANSLATIONS_QRC} "<RCC><qresource prefix=\"translations\">\n")
foreach (QM ${TRANSLATIONS_QM})
get_filename_component(QM_FILE ${QM} NAME)
file(APPEND ${TRANSLATIONS_QRC} "<file>${QM_FILE}</file>\n")
endforeach (QM)
file(APPEND ${TRANSLATIONS_QRC} "</qresource></RCC>")
qt_add_resources(TRANSLATIONS ${TRANSLATIONS_QRC})
endif()
set(AUDIO_CORE src/audio_core/sdl_audio.cpp
@ -136,6 +148,7 @@ set(AUDIO_LIB src/core/libraries/audio/audioin.cpp
set(GNM_LIB src/core/libraries/gnmdriver/gnmdriver.cpp
src/core/libraries/gnmdriver/gnmdriver.h
src/core/libraries/gnmdriver/gnm_error.h
)
set(KERNEL_LIB
@ -217,6 +230,7 @@ set(SYSTEM_LIBS src/core/libraries/system/commondialog.cpp
src/core/libraries/ngs2/ngs2_error.h
src/core/libraries/ngs2/ngs2_impl.cpp
src/core/libraries/ngs2/ngs2_impl.h
src/core/libraries/ajm/ajm_error.h
)
set(VIDEOOUT_LIB src/core/libraries/videoout/buffer.h
@ -252,6 +266,7 @@ set(PLAYGO_LIB src/core/libraries/playgo/playgo.cpp
set(RANDOM_LIB src/core/libraries/random/random.cpp
src/core/libraries/random/random.h
src/core/libraries/random/random_error.h
)
set(USBD_LIB src/core/libraries/usbd/usbd.cpp
@ -434,7 +449,7 @@ set(SHADER_RECOMPILER src/shader_recompiler/exception.h
src/shader_recompiler/frontend/opcodes.h
src/shader_recompiler/frontend/structured_control_flow.cpp
src/shader_recompiler/frontend/structured_control_flow.h
src/shader_recompiler/ir/passes/constant_propogation_pass.cpp
src/shader_recompiler/ir/passes/constant_propagation_pass.cpp
src/shader_recompiler/ir/passes/dead_code_elimination_pass.cpp
src/shader_recompiler/ir/passes/identity_removal_pass.cpp
src/shader_recompiler/ir/passes/ir_passes.h
@ -472,6 +487,7 @@ set(VIDEO_CORE src/video_core/amdgpu/liverpool.cpp
src/video_core/amdgpu/pm4_cmds.h
src/video_core/amdgpu/pm4_opcodes.h
src/video_core/amdgpu/resource.h
src/video_core/amdgpu/default_context.cpp
src/video_core/buffer_cache/buffer.cpp
src/video_core/buffer_cache/buffer.h
src/video_core/buffer_cache/buffer_cache.cpp
@ -547,6 +563,10 @@ qt_add_resources(RESOURCE_FILES src/shadps4.qrc)
set(QT_GUI src/qt_gui/about_dialog.cpp
src/qt_gui/about_dialog.h
src/qt_gui/about_dialog.ui
src/qt_gui/cheats_patches.cpp
src/qt_gui/cheats_patches.h
src/qt_gui/memory_patcher.cpp
src/qt_gui/memory_patcher.h
src/qt_gui/main_window_ui.h
src/qt_gui/main_window.cpp
src/qt_gui/main_window.h
@ -574,6 +594,7 @@ set(QT_GUI src/qt_gui/about_dialog.cpp
src/qt_gui/main.cpp
${EMULATOR}
${RESOURCE_FILES}
${TRANSLATIONS}
)
endif()
@ -634,7 +655,8 @@ else()
endif()
if (ENABLE_QT_GUI)
target_link_libraries(shadps4 PRIVATE Qt6::Widgets Qt6::Concurrent)
target_link_libraries(shadps4 PRIVATE Qt6::Widgets Qt6::Concurrent Qt6::Network)
add_definitions(-DENABLE_QT_GUI)
endif()
if (WIN32)

View File

@ -32,27 +32,30 @@ SPDX-License-Identifier: GPL-2.0-or-later
<img src="https://github.com/shadps4-emu/shadPS4/blob/main/documents/Screenshots/We are DOOMED.png" width="400">
</p>
# shadPS4
# General information
shadPS4 is an early **PlayStation 4** emulator for **Windows**, **Linux** and **macOS** written in C++
shadPS4 is an early **PlayStation 4** emulator for **Windows**, **Linux** and **macOS** written in C++.
If you encounter problems or have doubts, do not hesitate to look at the [**Quickstart**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/Quickstart/Quickstart.md).
To verify that a game works, you can look at [**shadPS4 Game Compatibility**](https://github.com/shadps4-emu/shadps4-game-compatibility).
To discuss shadPS4 development or suggest ideas, join the [**Discord server**](https://discord.gg/MyZRaBngxA).
To discuss shadPS4 development, suggest ideas or to ask for help, join our [**Discord server**](https://discord.gg/MyZRaBngxA).
To get the latest news, go to our [**X (twitter)**](https://x.com/shadps4) or our [**website**](https://shadps4.net/).
To get the latest news, go to our [**X (Twitter)**](https://x.com/shadps4) or our [**website**](https://shadps4.net/).
# Status
In development, small games are working like [**Sonic Mania**](https://www.youtube.com/watch?v=AAHoNzhHyCU), [**Undertale**](https://youtu.be/5zIvdy65Ro4), [**Dysmantle**](https://youtu.be/b9xzhLBdESE) and others...
> [!IMPORTANT]
> shadPS4 is early in developement, don't expect a flawless experience.
Currently, the emulator successfully runs small games like [**Sonic Mania**](https://www.youtube.com/watch?v=AAHoNzhHyCU), [**Undertale**](https://youtu.be/5zIvdy65Ro4) and it can even *somewhat* run [**Bloodborne**](https://www.youtube.com/watch?v=wC6s0avpQRE).
# Why
The project started as a fun project. Due to limited free time, it will probably take a while before shadPS4 is able to run anything decent, but we're trying to make small, regular commits.
This project began as a fun project. Given our limited free time, it may take some time before shadPS4 can run more complex games, but we're committed to making small, regular updates.
# Build
# Building
## Windows
@ -62,7 +65,7 @@ Check the build instructions for [**Windows**](https://github.com/shadps4-emu/sh
Check the build instructions for [**Linux**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-linux.md).
## Build status
## Building status
<details>
<summary><b>Windows</b></summary>
@ -95,9 +98,12 @@ Check the build instructions for [**Linux**](https://github.com/shadps4-emu/shad
For more information on how to test, debug and report issues with the emulator or games, read the [Debugging documentation](https://github.com/shadps4-emu/shadPS4/blob/main/documents/Debugging/Debugging.md).
# Keyboard Mapping
# Keyboard mapping
| Controller button | Keyboard |
> [!NOTE]
> Xbox and DualShock controllers work out of the box.
| Controller button | Keyboard equivelant |
|-------------|-------------|
LEFT AXIS UP | W |
LEFT AXIS DOWN | S |

View File

@ -17,34 +17,53 @@ Note: **ARM64 is not supported!** As of writing, it will not build nor run. The
Once you are within the installer:
1. Select `Desktop development with C++`
2. Go to "Individual Components" tab
3. Make sure `C++ Clang Compiler for Windows`, `MSBuild support for LLVM` and `C++ CMake Tools for Windows` are selected
3. Search and select `C++ Clang Compiler for Windows` and `MSBuild support for LLVM`
4. Continue the installation
### (Prerequisite) Download [**Qt**](https://doc.qt.io/qt-6/get-and-install-qt.html)
Beware, this requires you to create a Qt account. If you do not want to do this, please follow the MSYS2/MinGW compilation method instead.
1. Select Qt for Visual Studio plugin
2. Select `msvc2019_64` option or similar. If you are on Windows on ARM / Qualcomm Snapdragon Elite X, select `msvc2019_arm64`
1. Under the current, non beta version of Qt (at the time of writing 6.7.2), select the option `MSVC 2019 64-bit` or similar.
If you are on Windows on ARM / Qualcomm Snapdragon Elite X, select `MSVC 2019 ARM64` instead.
Go through the installation normally. If you do not know what components to select, just select the newest Qt version it gives you.
If you know what you are doing, you may unselect individual components that eat up too much disk space.
Go through the installation normally. If you know what you are doing, you may unselect individual components that eat up too much disk space.
2. Download and install [Qt Visual Studio Tools](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2022)
Once you are finished, you will have to configure Qt within Visual Studio:
1. Tools -> Options -> Qt -> Versions
2. Add a new Qt version and navigate it to the correct folder. Should look like so: `C:\Qt\6.7.1\msvc2019_64`
2. Add a new Qt version and navigate it to the correct folder. Should look like so: `C:\Qt\6.7.2\msvc2019_64`
3. Enable the default checkmark on the new version you just created.
### (Prerequisite) Download [**Git for Windows**](https://git-scm.com/download/win)
Go through the Git for Windows installation as normal
### Compiling with Visual Studio GUI
### Cloning the source code
1. Open Git for Windows, navigate to a place where you want to store the shadPS4 source code folder
2. Run `git clone --depth 1 --recursive https://github.com/shadps4-emu/shadPS4`
3. Open up Visual Studio, select `Open a local folder` and select the folder with the shadPS4 source code. The folder should contain `CMakeLists.txt`
4. Build -> Build All
2. Clone the repository by running
`git clone --depth 1 --recursive https://github.com/shadps4-emu/shadPS4`
### Compiling with Visual Studio GUI
1. Open up Visual Studio, select `Open a local folder` and select the folder with the shadPS4 source code. The folder should contain `CMakeLists.txt`
2. Change x64-Clang-Debug to x64-Clang-Release if you want a regular, non-debug build.
3. If you want to build shadPS4 with the Qt Gui:
1. Click x64-Clang-Release and select "Manage Configurations"
2. Look for "CMake command arguments" and add to the text field
`-DENABLE_QT_GUI=ON -DCMAKE_PREFIX_PATH=C:\Qt\6.7.2\msvc2019_64`
(Change Qt path if you've installed it to non-default path)
3. Press CTRL+S to save and wait a moment for CMake generation
4. Change the project to build to shadps4.exe
5. Build -> Build All
Your shadps4.exe will be in `c:\path\to\source\Build\x64-Clang-Release\`
To automatically populate the necessary files to run shadPS4.exe, run in a command prompt or terminal:
`C:\Qt\6.7.2\msvc2019_64\bin\windeployqt.exe c:\path\to\shadps4.exe`
(Change Qt path if you've installed it to non-default path)
## Option 2: MSYS2/MinGW

View File

@ -114108,7 +114108,7 @@ STUB(
_ZN3sce2Np9CppWebApi6Common12IntrusivePtrINS1_7Matches2V124RequestCompetitiveResultEE7add_refEv)
STUB("efPahl2FufA",
_ZN3sce2Np9CppWebApi30CommunicationRestrictionStatus2V35Error8fromJsonERKNS_4Json5ValueE)
STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlemetId)
STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlementId)
STUB("efXnxYFN5oE", _ZNSt11range_errorD0Ev)
STUB("efcwuDLsAM0", _ZThn120_NK7WebCore16HTMLMediaElement5mutedEv)
STUB("efhGArzWdxE", _ZN7bmalloc6IsoTLS15s_didInitializeE)
@ -129493,7 +129493,7 @@ STUB(
STUB("kJlYH5uMAWI", sceNetResolverDestroy)
STUB("kJmdxo4uM+8",
_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE5_InitERKSt8_Locinfo)
STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlemetId)
STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlementId)
STUB(
"kJoY9lMIFzY",
_ZN3sce2Np9CppWebApi6Common8IteratorINS2_12IntrusivePtrINS1_21AdvancedPlayerProfile2V138MatchCompletionRateDisconnectedMetricsEEEEmmEi)

View File

@ -80897,10 +80897,10 @@ sceAppCheckerExecute
sceAppCheckerExecuteEx
sceAppContentAddcontDelete
sceAppContentAddcontEnqueueDownload
sceAppContentAddcontEnqueueDownloadByEntitlemetId
sceAppContentAddcontEnqueueDownloadByEntitlementId
sceAppContentAddcontEnqueueDownloadSp
sceAppContentAddcontMount
sceAppContentAddcontMountByEntitlemetId
sceAppContentAddcontMountByEntitlementId
sceAppContentAddcontShrink
sceAppContentAddcontUnmount
sceAppContentAppParamGetInt

View File

@ -17,9 +17,12 @@ static s32 gpuId = -1; // Vulkan physical device index. Set to negative for auto
static std::string logFilter;
static std::string logType = "async";
static std::string userName = "shadPS4";
static bool useSpecialPad = false;
static int specialPadClass = 1;
static bool isDebugDump = false;
static bool isShowSplash = false;
static bool isNullGpu = false;
static bool shouldCopyGPUBuffers = false;
static bool shouldDumpShaders = false;
static bool shouldDumpPM4 = false;
static u32 vblankDivider = 1;
@ -45,6 +48,7 @@ u32 m_window_size_H = 720;
std::vector<std::string> m_pkg_viewer;
std::vector<std::string> m_elf_viewer;
std::vector<std::string> m_recent_files;
std::string emulator_language = "en";
// Settings
u32 m_language = 1; // english
@ -80,6 +84,14 @@ std::string getUserName() {
return userName;
}
bool getUseSpecialPad() {
return useSpecialPad;
}
int getSpecialPadClass() {
return specialPadClass;
}
bool debugDump() {
return isDebugDump;
}
@ -92,6 +104,10 @@ bool nullGpu() {
return isNullGpu;
}
bool copyGPUCmdBuffers() {
return shouldCopyGPUBuffers;
}
bool dumpShaders() {
return shouldDumpShaders;
}
@ -148,6 +164,10 @@ void setNullGpu(bool enable) {
isNullGpu = enable;
}
void setCopyGPUCmdBuffers(bool enable) {
shouldCopyGPUBuffers = enable;
}
void setDumpShaders(bool enable) {
shouldDumpShaders = enable;
}
@ -196,6 +216,14 @@ void setUserName(const std::string& type) {
userName = type;
}
void setUseSpecialPad(bool use) {
useSpecialPad = use;
}
void setSpecialPadClass(int type) {
specialPadClass = type;
}
void setMainWindowGeometry(u32 x, u32 y, u32 w, u32 h) {
main_window_geometry_x = x;
main_window_geometry_y = y;
@ -214,10 +242,10 @@ void setIconSize(u32 size) {
void setIconSizeGrid(u32 size) {
m_icon_size_grid = size;
}
void setSliderPositon(u32 pos) {
void setSliderPosition(u32 pos) {
m_slider_pos = pos;
}
void setSliderPositonGrid(u32 pos) {
void setSliderPositionGrid(u32 pos) {
m_slider_pos_grid = pos;
}
void setTableMode(u32 mode) {
@ -242,6 +270,10 @@ void setRecentFiles(const std::vector<std::string>& recentFiles) {
m_recent_files = recentFiles;
}
void setEmulatorLanguage(std::string language) {
emulator_language = language;
}
u32 getMainWindowGeometryX() {
return main_window_geometry_x;
}
@ -266,10 +298,10 @@ u32 getIconSize() {
u32 getIconSizeGrid() {
return m_icon_size_grid;
}
u32 getSliderPositon() {
u32 getSliderPosition() {
return m_slider_pos;
}
u32 getSliderPositonGrid() {
u32 getSliderPositionGrid() {
return m_slider_pos_grid;
}
u32 getTableMode() {
@ -291,6 +323,10 @@ std::vector<std::string> getRecentFiles() {
return m_recent_files;
}
std::string getEmulatorLanguage() {
return emulator_language;
}
u32 GetLanguage() {
return m_language;
}
@ -321,12 +357,20 @@ void load(const std::filesystem::path& path) {
isShowSplash = toml::find_or<bool>(general, "showSplash", true);
}
if (data.contains("Input")) {
const toml::value& input = data.at("Input");
useSpecialPad = toml::find_or<bool>(input, "useSpecialPad", false);
specialPadClass = toml::find_or<int>(input, "specialPadClass", 1);
}
if (data.contains("GPU")) {
const toml::value& gpu = data.at("GPU");
screenWidth = toml::find_or<int>(gpu, "screenWidth", screenWidth);
screenHeight = toml::find_or<int>(gpu, "screenHeight", screenHeight);
isNullGpu = toml::find_or<bool>(gpu, "nullGpu", false);
shouldCopyGPUBuffers = toml::find_or<bool>(gpu, "copyGPUBuffers", false);
shouldDumpShaders = toml::find_or<bool>(gpu, "dumpShaders", false);
shouldDumpPM4 = toml::find_or<bool>(gpu, "dumpPM4", false);
vblankDivider = toml::find_or<int>(gpu, "vblankDivider", 1);
@ -368,6 +412,7 @@ void load(const std::filesystem::path& path) {
m_elf_viewer = toml::find_or<std::vector<std::string>>(gui, "elfDirs", {});
m_recent_files = toml::find_or<std::vector<std::string>>(gui, "recentFiles", {});
m_table_mode = toml::find_or<int>(gui, "gameTableMode", 0);
emulator_language = toml::find_or<std::string>(gui, "emulatorLanguage", "en");
}
if (data.contains("Settings")) {
@ -401,9 +446,12 @@ void save(const std::filesystem::path& path) {
data["General"]["logType"] = logType;
data["General"]["userName"] = userName;
data["General"]["showSplash"] = isShowSplash;
data["Input"]["useSpecialPad"] = useSpecialPad;
data["Input"]["specialPadClass"] = specialPadClass;
data["GPU"]["screenWidth"] = screenWidth;
data["GPU"]["screenHeight"] = screenHeight;
data["GPU"]["nullGpu"] = isNullGpu;
data["GPU"]["copyGPUBuffers"] = shouldCopyGPUBuffers;
data["GPU"]["dumpShaders"] = shouldDumpShaders;
data["GPU"]["dumpPM4"] = shouldDumpPM4;
data["GPU"]["vblankDivider"] = vblankDivider;
@ -430,6 +478,7 @@ void save(const std::filesystem::path& path) {
data["GUI"]["pkgDirs"] = m_pkg_viewer;
data["GUI"]["elfDirs"] = m_elf_viewer;
data["GUI"]["recentFiles"] = m_recent_files;
data["GUI"]["emulatorLanguage"] = emulator_language;
data["Settings"]["consoleLanguage"] = m_language;
@ -446,6 +495,8 @@ void setDefaultValues() {
logFilter = "";
logType = "async";
userName = "shadPS4";
useSpecialPad = false;
specialPadClass = 1;
isDebugDump = false;
isShowSplash = false;
isNullGpu = false;
@ -454,6 +505,7 @@ void setDefaultValues() {
vblankDivider = 1;
vkValidation = false;
rdocEnable = false;
emulator_language = "en";
m_language = 1;
gpuId = -1;
}

View File

@ -17,6 +17,9 @@ std::string getLogFilter();
std::string getLogType();
std::string getUserName();
bool getUseSpecialPad();
int getSpecialPadClass();
u32 getScreenWidth();
u32 getScreenHeight();
s32 getGpuId();
@ -24,6 +27,7 @@ s32 getGpuId();
bool debugDump();
bool showSplash();
bool nullGpu();
bool copyGPUCmdBuffers();
bool dumpShaders();
bool dumpPM4();
bool isRdocEnabled();
@ -33,6 +37,7 @@ u32 vblankDiv();
void setDebugDump(bool enable);
void setShowSplash(bool enable);
void setNullGpu(bool enable);
void setCopyGPUCmdBuffers(bool enable);
void setDumpShaders(bool enable);
void setDumpPM4(bool enable);
void setVblankDiv(u32 value);
@ -44,6 +49,9 @@ void setLanguage(u32 language);
void setNeoMode(bool enable);
void setUserName(const std::string& type);
void setUseSpecialPad(bool use);
void setSpecialPadClass(int type);
void setLogType(const std::string& type);
void setLogFilter(const std::string& type);
@ -61,14 +69,15 @@ void setGameInstallDir(const std::string& dir);
void setMainWindowTheme(u32 theme);
void setIconSize(u32 size);
void setIconSizeGrid(u32 size);
void setSliderPositon(u32 pos);
void setSliderPositonGrid(u32 pos);
void setSliderPosition(u32 pos);
void setSliderPositionGrid(u32 pos);
void setTableMode(u32 mode);
void setMainWindowWidth(u32 width);
void setMainWindowHeight(u32 height);
void setPkgViewer(const std::vector<std::string>& pkgList);
void setElfViewer(const std::vector<std::string>& elfList);
void setRecentFiles(const std::vector<std::string>& recentFiles);
void setEmulatorLanguage(std::string language);
u32 getMainWindowGeometryX();
u32 getMainWindowGeometryY();
@ -78,14 +87,15 @@ std::string getGameInstallDir();
u32 getMainWindowTheme();
u32 getIconSize();
u32 getIconSizeGrid();
u32 getSliderPositon();
u32 getSliderPositonGrid();
u32 getSliderPosition();
u32 getSliderPositionGrid();
u32 getTableMode();
u32 getMainWindowWidth();
u32 getMainWindowHeight();
std::vector<std::string> getPkgViewer();
std::vector<std::string> getElfViewer();
std::vector<std::string> getRecentFiles();
std::string getEmulatorLanguage();
void setDefaultValues();

View File

@ -29,7 +29,7 @@ static inline bool IsProfilerConnected() {
#define TRACK_ALLOC(ptr, size, pool) TracyAllocN(std::bit_cast<void*>(ptr), (size), (pool))
#define TRACK_FREE(ptr, pool) TracyFreeN(std::bit_cast<void*>(ptr), (pool))
enum MarkersPallete : int {
enum MarkersPalette : int {
EmulatorMarkerColor = 0x264653,
RendererMarkerColor = 0x2a9d8f,
HleMarkerColor = 0xe9c46a,

View File

@ -18,16 +18,16 @@ NativeClock::NativeClock()
us_rdtsc_factor{GetFixedPoint64Factor(std::micro::den, rdtsc_frequency)},
ms_rdtsc_factor{GetFixedPoint64Factor(std::milli::den, rdtsc_frequency)} {}
u64 NativeClock::GetTimeNS() const {
return MultiplyHigh(GetUptime(), ns_rdtsc_factor);
u64 NativeClock::GetTimeNS(u64 base_ptc /*= 0*/) const {
return MultiplyHigh(GetUptime() - base_ptc, ns_rdtsc_factor);
}
u64 NativeClock::GetTimeUS() const {
return MultiplyHigh(GetUptime(), us_rdtsc_factor);
u64 NativeClock::GetTimeUS(u64 base_ptc /*= 0*/) const {
return MultiplyHigh(GetUptime() - base_ptc, us_rdtsc_factor);
}
u64 NativeClock::GetTimeMS() const {
return MultiplyHigh(GetUptime(), ms_rdtsc_factor);
u64 NativeClock::GetTimeMS(u64 base_ptc /*= 0*/) const {
return MultiplyHigh(GetUptime() - base_ptc, ms_rdtsc_factor);
}
u64 NativeClock::GetUptime() const {

View File

@ -16,9 +16,9 @@ public:
return rdtsc_frequency;
}
u64 GetTimeNS() const;
u64 GetTimeUS() const;
u64 GetTimeMS() const;
u64 GetTimeNS(u64 base_ptc = 0) const;
u64 GetTimeUS(u64 base_ptc = 0) const;
u64 GetTimeMS(u64 base_ptc = 0) const;
u64 GetUptime() const;
u64 GetProcessTimeUS() const;

View File

@ -104,6 +104,8 @@ static auto UserPaths = [] {
create_path(PathType::SysModuleDir, user_dir / SYSMODULES_DIR);
create_path(PathType::DownloadDir, user_dir / DOWNLOAD_DIR);
create_path(PathType::CapturesDir, user_dir / CAPTURES_DIR);
create_path(PathType::CheatsDir, user_dir / CHEATS_DIR);
create_path(PathType::PatchesDir, user_dir / PATCHES_DIR);
return paths;
}();

View File

@ -20,6 +20,8 @@ enum class PathType {
SysModuleDir, // Where system modules are stored.
DownloadDir, // Where downloads/temp files are stored.
CapturesDir, // Where rdoc captures are stored.
CheatsDir, // Where cheats are stored.
PatchesDir, // Where patches are stored.
};
constexpr auto PORTABLE_DIR = "user";
@ -35,6 +37,8 @@ constexpr auto TEMPDATA_DIR = "temp";
constexpr auto SYSMODULES_DIR = "sys_modules";
constexpr auto DOWNLOAD_DIR = "download";
constexpr auto CAPTURES_DIR = "captures";
constexpr auto CHEATS_DIR = "cheats";
constexpr auto PATCHES_DIR = "patches";
// Filenames
constexpr auto LOG_FILE = "shad_log.txt";

View File

@ -114108,7 +114108,7 @@ STUB(
_ZN3sce2Np9CppWebApi6Common12IntrusivePtrINS1_7Matches2V124RequestCompetitiveResultEE7add_refEv)
STUB("efPahl2FufA",
_ZN3sce2Np9CppWebApi30CommunicationRestrictionStatus2V35Error8fromJsonERKNS_4Json5ValueE)
STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlemetId)
STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlementId)
STUB("efXnxYFN5oE", _ZNSt11range_errorD0Ev)
STUB("efcwuDLsAM0", _ZThn120_NK7WebCore16HTMLMediaElement5mutedEv)
STUB("efhGArzWdxE", _ZN7bmalloc6IsoTLS15s_didInitializeE)
@ -129493,7 +129493,7 @@ STUB(
STUB("kJlYH5uMAWI", sceNetResolverDestroy)
STUB("kJmdxo4uM+8",
_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE5_InitERKSt8_Locinfo)
STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlemetId)
STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlementId)
STUB(
"kJoY9lMIFzY",
_ZN3sce2Np9CppWebApi6Common8IteratorINS2_12IntrusivePtrINS1_21AdvancedPlayerProfile2V138MatchCompletionRateDisconnectedMetricsEEEEmmEi)

View File

@ -13,7 +13,7 @@ namespace Core::AeroLib {
// on lookup, setting up the nid_entry they are matched with
//
// If it runs out of stubs with name information, it will return
// a default implemetnation without function name details
// a default implementation without function name details
// Up to 512, larger values lead to more resolve stub slots
// and to longer compile / CI times

View File

@ -6,18 +6,18 @@
CryptoPP::RSA::PrivateKey Crypto::key_pkg_derived_key3_keyset_init() {
CryptoPP::InvertibleRSAFunction params;
params.SetPrime1(CryptoPP::Integer(pkg_derived_key3_keyset.Prime1, 0x80));
params.SetPrime2(CryptoPP::Integer(pkg_derived_key3_keyset.Prime2, 0x80));
params.SetPrime1(CryptoPP::Integer(PkgDerivedKey3Keyset::Prime1, 0x80));
params.SetPrime2(CryptoPP::Integer(PkgDerivedKey3Keyset::Prime2, 0x80));
params.SetPublicExponent(CryptoPP::Integer(pkg_derived_key3_keyset.PublicExponent, 4));
params.SetPrivateExponent(CryptoPP::Integer(pkg_derived_key3_keyset.PrivateExponent, 0x100));
params.SetPublicExponent(CryptoPP::Integer(PkgDerivedKey3Keyset::PublicExponent, 4));
params.SetPrivateExponent(CryptoPP::Integer(PkgDerivedKey3Keyset::PrivateExponent, 0x100));
params.SetModPrime1PrivateExponent(CryptoPP::Integer(pkg_derived_key3_keyset.Exponent1, 0x80));
params.SetModPrime2PrivateExponent(CryptoPP::Integer(pkg_derived_key3_keyset.Exponent2, 0x80));
params.SetModPrime1PrivateExponent(CryptoPP::Integer(PkgDerivedKey3Keyset::Exponent1, 0x80));
params.SetModPrime2PrivateExponent(CryptoPP::Integer(PkgDerivedKey3Keyset::Exponent2, 0x80));
params.SetModulus(CryptoPP::Integer(pkg_derived_key3_keyset.Modulus, 0x100));
params.SetModulus(CryptoPP::Integer(PkgDerivedKey3Keyset::Modulus, 0x100));
params.SetMultiplicativeInverseOfPrime2ModPrime1(
CryptoPP::Integer(pkg_derived_key3_keyset.Coefficient, 0x80));
CryptoPP::Integer(PkgDerivedKey3Keyset::Coefficient, 0x80));
CryptoPP::RSA::PrivateKey privateKey(params);
@ -26,18 +26,18 @@ CryptoPP::RSA::PrivateKey Crypto::key_pkg_derived_key3_keyset_init() {
CryptoPP::RSA::PrivateKey Crypto::FakeKeyset_keyset_init() {
CryptoPP::InvertibleRSAFunction params;
params.SetPrime1(CryptoPP::Integer(FakeKeyset_keyset.Prime1, 0x80));
params.SetPrime2(CryptoPP::Integer(FakeKeyset_keyset.Prime2, 0x80));
params.SetPrime1(CryptoPP::Integer(FakeKeyset::Prime1, 0x80));
params.SetPrime2(CryptoPP::Integer(FakeKeyset::Prime2, 0x80));
params.SetPublicExponent(CryptoPP::Integer(FakeKeyset_keyset.PublicExponent, 4));
params.SetPrivateExponent(CryptoPP::Integer(FakeKeyset_keyset.PrivateExponent, 0x100));
params.SetPublicExponent(CryptoPP::Integer(FakeKeyset::PublicExponent, 4));
params.SetPrivateExponent(CryptoPP::Integer(FakeKeyset::PrivateExponent, 0x100));
params.SetModPrime1PrivateExponent(CryptoPP::Integer(FakeKeyset_keyset.Exponent1, 0x80));
params.SetModPrime2PrivateExponent(CryptoPP::Integer(FakeKeyset_keyset.Exponent2, 0x80));
params.SetModPrime1PrivateExponent(CryptoPP::Integer(FakeKeyset::Exponent1, 0x80));
params.SetModPrime2PrivateExponent(CryptoPP::Integer(FakeKeyset::Exponent2, 0x80));
params.SetModulus(CryptoPP::Integer(FakeKeyset_keyset.Modulus, 0x100));
params.SetModulus(CryptoPP::Integer(FakeKeyset::Modulus, 0x100));
params.SetMultiplicativeInverseOfPrime2ModPrime1(
CryptoPP::Integer(FakeKeyset_keyset.Coefficient, 0x80));
CryptoPP::Integer(FakeKeyset::Coefficient, 0x80));
CryptoPP::RSA::PrivateKey privateKey(params);
@ -46,25 +46,22 @@ CryptoPP::RSA::PrivateKey Crypto::FakeKeyset_keyset_init() {
CryptoPP::RSA::PrivateKey Crypto::DebugRifKeyset_init() {
CryptoPP::InvertibleRSAFunction params;
params.SetPrime1(
CryptoPP::Integer(DebugRifKeyset_keyset.Prime1, sizeof(DebugRifKeyset_keyset.Prime1)));
params.SetPrime2(
CryptoPP::Integer(DebugRifKeyset_keyset.Prime2, sizeof(DebugRifKeyset_keyset.Prime2)));
params.SetPrime1(CryptoPP::Integer(DebugRifKeyset::Prime1, sizeof(DebugRifKeyset::Prime1)));
params.SetPrime2(CryptoPP::Integer(DebugRifKeyset::Prime2, sizeof(DebugRifKeyset::Prime2)));
params.SetPublicExponent(CryptoPP::Integer(DebugRifKeyset_keyset.PublicExponent,
sizeof(DebugRifKeyset_keyset.PublicExponent)));
params.SetPrivateExponent(CryptoPP::Integer(DebugRifKeyset_keyset.PrivateExponent,
sizeof(DebugRifKeyset_keyset.PrivateExponent)));
params.SetPublicExponent(
CryptoPP::Integer(DebugRifKeyset::PublicExponent, sizeof(DebugRifKeyset::PublicExponent)));
params.SetPrivateExponent(CryptoPP::Integer(DebugRifKeyset::PrivateExponent,
sizeof(DebugRifKeyset::PrivateExponent)));
params.SetModPrime1PrivateExponent(CryptoPP::Integer(DebugRifKeyset_keyset.Exponent1,
sizeof(DebugRifKeyset_keyset.Exponent1)));
params.SetModPrime2PrivateExponent(CryptoPP::Integer(DebugRifKeyset_keyset.Exponent2,
sizeof(DebugRifKeyset_keyset.Exponent2)));
params.SetModPrime1PrivateExponent(
CryptoPP::Integer(DebugRifKeyset::Exponent1, sizeof(DebugRifKeyset::Exponent1)));
params.SetModPrime2PrivateExponent(
CryptoPP::Integer(DebugRifKeyset::Exponent2, sizeof(DebugRifKeyset::Exponent2)));
params.SetModulus(
CryptoPP::Integer(DebugRifKeyset_keyset.Modulus, sizeof(DebugRifKeyset_keyset.Modulus)));
params.SetMultiplicativeInverseOfPrime2ModPrime1(CryptoPP::Integer(
DebugRifKeyset_keyset.Coefficient, sizeof(DebugRifKeyset_keyset.Coefficient)));
params.SetModulus(CryptoPP::Integer(DebugRifKeyset::Modulus, sizeof(DebugRifKeyset::Modulus)));
params.SetMultiplicativeInverseOfPrime2ModPrime1(
CryptoPP::Integer(DebugRifKeyset::Coefficient, sizeof(DebugRifKeyset::Coefficient)));
CryptoPP::RSA::PrivateKey privateKey(params);

View File

@ -17,10 +17,6 @@
class Crypto {
public:
PkgDerivedKey3Keyset pkg_derived_key3_keyset;
FakeKeyset FakeKeyset_keyset;
DebugRifKeyset DebugRifKeyset_keyset;
CryptoPP::RSA::PrivateKey key_pkg_derived_key3_keyset_init();
CryptoPP::RSA::PrivateKey FakeKeyset_keyset_init();
CryptoPP::RSA::PrivateKey DebugRifKeyset_init();

View File

@ -7,384 +7,299 @@
class FakeKeyset {
public:
// Constructor
const CryptoPP::byte* Exponent1;
static constexpr CryptoPP::byte Exponent1[] = {
0x6D, 0x48, 0xE0, 0x54, 0x40, 0x25, 0xC8, 0x41, 0x29, 0x52, 0x42, 0x27, 0xEB, 0xD2, 0xC7,
0xAB, 0x6B, 0x9C, 0x27, 0x0A, 0xB4, 0x1F, 0x94, 0x4E, 0xFA, 0x42, 0x1D, 0xB7, 0xBC, 0xB9,
0xAE, 0xBC, 0x04, 0x6F, 0x75, 0x8F, 0x10, 0x5F, 0x89, 0xAC, 0xAB, 0x9C, 0xD2, 0xFA, 0xE6,
0xA4, 0x13, 0x83, 0x68, 0xD4, 0x56, 0x38, 0xFE, 0xE5, 0x2B, 0x78, 0x44, 0x9C, 0x34, 0xE6,
0x5A, 0xA0, 0xBE, 0x05, 0x70, 0xAD, 0x15, 0xC3, 0x2D, 0x31, 0xAC, 0x97, 0x5D, 0x88, 0xFC,
0xC1, 0x62, 0x3D, 0xE2, 0xED, 0x11, 0xDB, 0xB6, 0x9E, 0xFC, 0x5A, 0x5A, 0x03, 0xF6, 0xCF,
0x08, 0xD4, 0x5D, 0x90, 0xC9, 0x2A, 0xB9, 0x9B, 0xCF, 0xC8, 0x1A, 0x65, 0xF3, 0x5B, 0xE8,
0x7F, 0xCF, 0xA5, 0xA6, 0x4C, 0x5C, 0x2A, 0x12, 0x0F, 0x92, 0xA5, 0xE3, 0xF0, 0x17, 0x1E,
0x9A, 0x97, 0x45, 0x86, 0xFD, 0xDB, 0x54, 0x25};
// exponent2 = d mod (q - 1)
const CryptoPP::byte* Exponent2;
static constexpr CryptoPP::byte Exponent2[] = {
0x2A, 0x51, 0xCE, 0x02, 0x44, 0x28, 0x50, 0xE8, 0x30, 0x20, 0x7C, 0x9C, 0x55, 0xBF, 0x60,
0x39, 0xBC, 0xD1, 0xF0, 0xE7, 0x68, 0xF8, 0x08, 0x5B, 0x61, 0x1F, 0xA7, 0xBF, 0xD0, 0xE8,
0x8B, 0xB5, 0xB1, 0xD5, 0xD9, 0x16, 0xAC, 0x75, 0x0C, 0x6D, 0xF2, 0xE0, 0xB5, 0x97, 0x75,
0xD2, 0x68, 0x16, 0x1F, 0x00, 0x7D, 0x8B, 0x17, 0xE8, 0x78, 0x48, 0x41, 0x71, 0x2B, 0x18,
0x96, 0x80, 0x11, 0xDB, 0x68, 0x39, 0x9C, 0xD6, 0xE0, 0x72, 0x42, 0x86, 0xF0, 0x1B, 0x16,
0x0D, 0x3E, 0x12, 0x94, 0x3D, 0x25, 0xA8, 0xA9, 0x30, 0x9E, 0x54, 0x5A, 0xD6, 0x36, 0x6C,
0xD6, 0x8C, 0x20, 0x62, 0x8F, 0xA1, 0x6B, 0x1F, 0x7C, 0x6D, 0xB2, 0xB1, 0xC1, 0x2E, 0xAD,
0x36, 0x02, 0x9C, 0x3A, 0xCA, 0x2F, 0x09, 0xD2, 0x45, 0x9E, 0xEB, 0xF2, 0xBC, 0x6C, 0xAA,
0x3B, 0x3E, 0x90, 0xBC, 0x38, 0x67, 0x35, 0x4D};
// e
const CryptoPP::byte* PublicExponent;
static constexpr CryptoPP::byte PublicExponent[] = {0, 1, 0, 1};
// (InverseQ)(q) = 1 mod p
const CryptoPP::byte* Coefficient;
static constexpr CryptoPP::byte Coefficient[] = {
0x0B, 0x67, 0x1C, 0x0D, 0x6C, 0x57, 0xD3, 0xE7, 0x05, 0x65, 0x94, 0x31, 0x56, 0x55, 0xFD,
0x28, 0x08, 0xFA, 0x05, 0x8A, 0xCC, 0x55, 0x39, 0x61, 0x97, 0x63, 0xA0, 0x16, 0x27, 0x3D,
0xED, 0xC1, 0x16, 0x40, 0x2A, 0x12, 0xEA, 0x6F, 0xD9, 0xD8, 0x58, 0x56, 0xA8, 0x56, 0x8B,
0x0D, 0x38, 0x5E, 0x1E, 0x80, 0x3B, 0x5F, 0x40, 0x80, 0x6F, 0x62, 0x4F, 0x28, 0xA2, 0x69,
0xF3, 0xD3, 0xF7, 0xFD, 0xB2, 0xC3, 0x52, 0x43, 0x20, 0x92, 0x9D, 0x97, 0x8D, 0xA0, 0x15,
0x07, 0x15, 0x6E, 0xA4, 0x0D, 0x56, 0xD3, 0x37, 0x1A, 0xC4, 0x9E, 0xDF, 0x02, 0x49, 0xB8,
0x0A, 0x84, 0x62, 0xF5, 0xFA, 0xB9, 0x3F, 0xA4, 0x09, 0x76, 0xCC, 0xAA, 0xB9, 0x9B, 0xA6,
0x4F, 0xC1, 0x6A, 0x64, 0xCE, 0xD8, 0x77, 0xAB, 0x4B, 0xF9, 0xA0, 0xAE, 0xDA, 0xF1, 0x67,
0x87, 0x7C, 0x98, 0x5C, 0x7E, 0xB8, 0x73, 0xF5};
// n = p * q
const CryptoPP::byte* Modulus;
static constexpr CryptoPP::byte Modulus[] = {
0xC6, 0xCF, 0x71, 0xE7, 0xE5, 0x9A, 0xF0, 0xD1, 0x2A, 0x2C, 0x45, 0x8B, 0xF9, 0x2A, 0x0E,
0xC1, 0x43, 0x05, 0x8B, 0xC3, 0x71, 0x17, 0x80, 0x1D, 0xCD, 0x49, 0x7D, 0xDE, 0x35, 0x9D,
0x25, 0x9B, 0xA0, 0xD7, 0xA0, 0xF2, 0x7D, 0x6C, 0x08, 0x7E, 0xAA, 0x55, 0x02, 0x68, 0x2B,
0x23, 0xC6, 0x44, 0xB8, 0x44, 0x18, 0xEB, 0x56, 0xCF, 0x16, 0xA2, 0x48, 0x03, 0xC9, 0xE7,
0x4F, 0x87, 0xEB, 0x3D, 0x30, 0xC3, 0x15, 0x88, 0xBF, 0x20, 0xE7, 0x9D, 0xFF, 0x77, 0x0C,
0xDE, 0x1D, 0x24, 0x1E, 0x63, 0xA9, 0x4F, 0x8A, 0xBF, 0x5B, 0xBE, 0x60, 0x19, 0x68, 0x33,
0x3B, 0xFC, 0xED, 0x9F, 0x47, 0x4E, 0x5F, 0xF8, 0xEA, 0xCB, 0x3D, 0x00, 0xBD, 0x67, 0x01,
0xF9, 0x2C, 0x6D, 0xC6, 0xAC, 0x13, 0x64, 0xE7, 0x67, 0x14, 0xF3, 0xDC, 0x52, 0x69, 0x6A,
0xB9, 0x83, 0x2C, 0x42, 0x30, 0x13, 0x1B, 0xB2, 0xD8, 0xA5, 0x02, 0x0D, 0x79, 0xED, 0x96,
0xB1, 0x0D, 0xF8, 0xCC, 0x0C, 0xDF, 0x81, 0x95, 0x4F, 0x03, 0x58, 0x09, 0x57, 0x0E, 0x80,
0x69, 0x2E, 0xFE, 0xFF, 0x52, 0x77, 0xEA, 0x75, 0x28, 0xA8, 0xFB, 0xC9, 0xBE, 0xBF, 0x9F,
0xBB, 0xB7, 0x79, 0x8E, 0x18, 0x05, 0xE1, 0x80, 0xBD, 0x50, 0x34, 0x94, 0x81, 0xD3, 0x53,
0xC2, 0x69, 0xA2, 0xD2, 0x4C, 0xCF, 0x6C, 0xF4, 0x57, 0x2C, 0x10, 0x4A, 0x3F, 0xFB, 0x22,
0xFD, 0x8B, 0x97, 0xE2, 0xC9, 0x5B, 0xA6, 0x2B, 0xCD, 0xD6, 0x1B, 0x6B, 0xDB, 0x68, 0x7F,
0x4B, 0xC2, 0xA0, 0x50, 0x34, 0xC0, 0x05, 0xE5, 0x8D, 0xEF, 0x24, 0x67, 0xFF, 0x93, 0x40,
0xCF, 0x2D, 0x62, 0xA2, 0xA0, 0x50, 0xB1, 0xF1, 0x3A, 0xA8, 0x3D, 0xFD, 0x80, 0xD1, 0xF9,
0xB8, 0x05, 0x22, 0xAF, 0xC8, 0x35, 0x45, 0x90, 0x58, 0x8E, 0xE3, 0x3A, 0x7C, 0xBD, 0x3E,
0x27};
// p
const CryptoPP::byte* Prime1;
static constexpr CryptoPP::byte Prime1[] = {
0xFE, 0xF6, 0xBF, 0x1D, 0x69, 0xAB, 0x16, 0x25, 0x08, 0x47, 0x55, 0x6B, 0x86, 0xE4, 0x35,
0x88, 0x72, 0x2A, 0xB1, 0x3D, 0xF8, 0xB6, 0x44, 0xCA, 0xB3, 0xAB, 0x19, 0xD1, 0x04, 0x24,
0x28, 0x0A, 0x74, 0x55, 0xB8, 0x15, 0x45, 0x09, 0xCC, 0x13, 0x1C, 0xF2, 0xBA, 0x37, 0xA9,
0x03, 0x90, 0x8F, 0x02, 0x10, 0xFF, 0x25, 0x79, 0x86, 0xCC, 0x18, 0x50, 0x9A, 0x10, 0x5F,
0x5B, 0x4C, 0x1C, 0x4E, 0xB0, 0xA7, 0xE3, 0x59, 0xB1, 0x2D, 0xA0, 0xC6, 0xB0, 0x20, 0x2C,
0x21, 0x33, 0x12, 0xB3, 0xAF, 0x72, 0x34, 0x83, 0xCD, 0x52, 0x2F, 0xAF, 0x0F, 0x20, 0x5A,
0x1B, 0xC0, 0xE2, 0xA3, 0x76, 0x34, 0x0F, 0xD7, 0xFC, 0xC1, 0x41, 0xC9, 0xF9, 0x79, 0x40,
0x17, 0x42, 0x21, 0x3E, 0x9D, 0xFD, 0xC7, 0xC1, 0x50, 0xDE, 0x44, 0x5A, 0xC9, 0x31, 0x89,
0x6A, 0x78, 0x05, 0xBE, 0x65, 0xB4, 0xE8, 0x2D};
// q
const CryptoPP::byte* Prime2;
const CryptoPP::byte* PrivateExponent;
// Constructor
FakeKeyset() {
// Initialize PrivateExponent
PrivateExponent = new CryptoPP::byte[0x100]{
0x7F, 0x76, 0xCD, 0x0E, 0xE2, 0xD4, 0xDE, 0x05, 0x1C, 0xC6, 0xD9, 0xA8, 0x0E, 0x8D,
0xFA, 0x7B, 0xCA, 0x1E, 0xAA, 0x27, 0x1A, 0x40, 0xF8, 0xF1, 0x22, 0x87, 0x35, 0xDD,
0xDB, 0xFD, 0xEE, 0xF8, 0xC2, 0xBC, 0xBD, 0x01, 0xFB, 0x8B, 0xE2, 0x3E, 0x63, 0xB2,
0xB1, 0x22, 0x5C, 0x56, 0x49, 0x6E, 0x11, 0xBE, 0x07, 0x44, 0x0B, 0x9A, 0x26, 0x66,
0xD1, 0x49, 0x2C, 0x8F, 0xD3, 0x1B, 0xCF, 0xA4, 0xA1, 0xB8, 0xD1, 0xFB, 0xA4, 0x9E,
0xD2, 0x21, 0x28, 0x83, 0x09, 0x8A, 0xF6, 0xA0, 0x0B, 0xA3, 0xD6, 0x0F, 0x9B, 0x63,
0x68, 0xCC, 0xBC, 0x0C, 0x4E, 0x14, 0x5B, 0x27, 0xA4, 0xA9, 0xF4, 0x2B, 0xB9, 0xB8,
0x7B, 0xC0, 0xE6, 0x51, 0xAD, 0x1D, 0x77, 0xD4, 0x6B, 0xB9, 0xCE, 0x20, 0xD1, 0x26,
0x66, 0x7E, 0x5E, 0x9E, 0xA2, 0xE9, 0x6B, 0x90, 0xF3, 0x73, 0xB8, 0x52, 0x8F, 0x44,
0x11, 0x03, 0x0C, 0x13, 0x97, 0x39, 0x3D, 0x13, 0x22, 0x58, 0xD5, 0x43, 0x82, 0x49,
0xDA, 0x6E, 0x7C, 0xA1, 0xC5, 0x8C, 0xA5, 0xB0, 0x09, 0xE0, 0xCE, 0x3D, 0xDF, 0xF4,
0x9D, 0x3C, 0x97, 0x15, 0xE2, 0x6A, 0xC7, 0x2B, 0x3C, 0x50, 0x93, 0x23, 0xDB, 0xBA,
0x4A, 0x22, 0x66, 0x44, 0xAC, 0x78, 0xBB, 0x0E, 0x1A, 0x27, 0x43, 0xB5, 0x71, 0x67,
0xAF, 0xF4, 0xAB, 0x48, 0x46, 0x93, 0x73, 0xD0, 0x42, 0xAB, 0x93, 0x63, 0xE5, 0x6C,
0x9A, 0xDE, 0x50, 0x24, 0xC0, 0x23, 0x7D, 0x99, 0x79, 0x3F, 0x22, 0x07, 0xE0, 0xC1,
0x48, 0x56, 0x1B, 0xDF, 0x83, 0x09, 0x12, 0xB4, 0x2D, 0x45, 0x6B, 0xC9, 0xC0, 0x68,
0x85, 0x99, 0x90, 0x79, 0x96, 0x1A, 0xD7, 0xF5, 0x4D, 0x1F, 0x37, 0x83, 0x40, 0x4A,
0xEC, 0x39, 0x37, 0xA6, 0x80, 0x92, 0x7D, 0xC5, 0x80, 0xC7, 0xD6, 0x6F, 0xFE, 0x8A,
0x79, 0x89, 0xC6, 0xB1};
// Initialize Exponent1
Exponent1 = new CryptoPP::byte[0x80]{
0x6D, 0x48, 0xE0, 0x54, 0x40, 0x25, 0xC8, 0x41, 0x29, 0x52, 0x42, 0x27, 0xEB,
0xD2, 0xC7, 0xAB, 0x6B, 0x9C, 0x27, 0x0A, 0xB4, 0x1F, 0x94, 0x4E, 0xFA, 0x42,
0x1D, 0xB7, 0xBC, 0xB9, 0xAE, 0xBC, 0x04, 0x6F, 0x75, 0x8F, 0x10, 0x5F, 0x89,
0xAC, 0xAB, 0x9C, 0xD2, 0xFA, 0xE6, 0xA4, 0x13, 0x83, 0x68, 0xD4, 0x56, 0x38,
0xFE, 0xE5, 0x2B, 0x78, 0x44, 0x9C, 0x34, 0xE6, 0x5A, 0xA0, 0xBE, 0x05, 0x70,
0xAD, 0x15, 0xC3, 0x2D, 0x31, 0xAC, 0x97, 0x5D, 0x88, 0xFC, 0xC1, 0x62, 0x3D,
0xE2, 0xED, 0x11, 0xDB, 0xB6, 0x9E, 0xFC, 0x5A, 0x5A, 0x03, 0xF6, 0xCF, 0x08,
0xD4, 0x5D, 0x90, 0xC9, 0x2A, 0xB9, 0x9B, 0xCF, 0xC8, 0x1A, 0x65, 0xF3, 0x5B,
0xE8, 0x7F, 0xCF, 0xA5, 0xA6, 0x4C, 0x5C, 0x2A, 0x12, 0x0F, 0x92, 0xA5, 0xE3,
0xF0, 0x17, 0x1E, 0x9A, 0x97, 0x45, 0x86, 0xFD, 0xDB, 0x54, 0x25
};
Exponent2 = new CryptoPP::byte[0x80]{
0x2A, 0x51, 0xCE, 0x02, 0x44, 0x28, 0x50, 0xE8, 0x30, 0x20, 0x7C, 0x9C, 0x55,
0xBF, 0x60, 0x39, 0xBC, 0xD1, 0xF0, 0xE7, 0x68, 0xF8, 0x08, 0x5B, 0x61, 0x1F,
0xA7, 0xBF, 0xD0, 0xE8, 0x8B, 0xB5, 0xB1, 0xD5, 0xD9, 0x16, 0xAC, 0x75, 0x0C,
0x6D, 0xF2, 0xE0, 0xB5, 0x97, 0x75, 0xD2, 0x68, 0x16, 0x1F, 0x00, 0x7D, 0x8B,
0x17, 0xE8, 0x78, 0x48, 0x41, 0x71, 0x2B, 0x18, 0x96, 0x80, 0x11, 0xDB, 0x68,
0x39, 0x9C, 0xD6, 0xE0, 0x72, 0x42, 0x86, 0xF0, 0x1B, 0x16, 0x0D, 0x3E, 0x12,
0x94, 0x3D, 0x25, 0xA8, 0xA9, 0x30, 0x9E, 0x54, 0x5A, 0xD6, 0x36, 0x6C, 0xD6,
0x8C, 0x20, 0x62, 0x8F, 0xA1, 0x6B, 0x1F, 0x7C, 0x6D, 0xB2, 0xB1, 0xC1, 0x2E,
0xAD, 0x36, 0x02, 0x9C, 0x3A, 0xCA, 0x2F, 0x09, 0xD2, 0x45, 0x9E, 0xEB, 0xF2,
0xBC, 0x6C, 0xAA, 0x3B, 0x3E, 0x90, 0xBC, 0x38, 0x67, 0x35, 0x4D};
PublicExponent = new CryptoPP::byte[4]{0, 1, 0, 1};
Coefficient = new CryptoPP::byte[0x80]{
0x0B, 0x67, 0x1C, 0x0D, 0x6C, 0x57, 0xD3, 0xE7, 0x05, 0x65, 0x94, 0x31, 0x56,
0x55, 0xFD, 0x28, 0x08, 0xFA, 0x05, 0x8A, 0xCC, 0x55, 0x39, 0x61, 0x97, 0x63,
0xA0, 0x16, 0x27, 0x3D, 0xED, 0xC1, 0x16, 0x40, 0x2A, 0x12, 0xEA, 0x6F, 0xD9,
0xD8, 0x58, 0x56, 0xA8, 0x56, 0x8B, 0x0D, 0x38, 0x5E, 0x1E, 0x80, 0x3B, 0x5F,
0x40, 0x80, 0x6F, 0x62, 0x4F, 0x28, 0xA2, 0x69, 0xF3, 0xD3, 0xF7, 0xFD, 0xB2,
0xC3, 0x52, 0x43, 0x20, 0x92, 0x9D, 0x97, 0x8D, 0xA0, 0x15, 0x07, 0x15, 0x6E,
0xA4, 0x0D, 0x56, 0xD3, 0x37, 0x1A, 0xC4, 0x9E, 0xDF, 0x02, 0x49, 0xB8, 0x0A,
0x84, 0x62, 0xF5, 0xFA, 0xB9, 0x3F, 0xA4, 0x09, 0x76, 0xCC, 0xAA, 0xB9, 0x9B,
0xA6, 0x4F, 0xC1, 0x6A, 0x64, 0xCE, 0xD8, 0x77, 0xAB, 0x4B, 0xF9, 0xA0, 0xAE,
0xDA, 0xF1, 0x67, 0x87, 0x7C, 0x98, 0x5C, 0x7E, 0xB8, 0x73, 0xF5};
Modulus = new CryptoPP::byte[0x100]{
0xC6, 0xCF, 0x71, 0xE7, 0xE5, 0x9A, 0xF0, 0xD1, 0x2A, 0x2C, 0x45, 0x8B, 0xF9, 0x2A,
0x0E, 0xC1, 0x43, 0x05, 0x8B, 0xC3, 0x71, 0x17, 0x80, 0x1D, 0xCD, 0x49, 0x7D, 0xDE,
0x35, 0x9D, 0x25, 0x9B, 0xA0, 0xD7, 0xA0, 0xF2, 0x7D, 0x6C, 0x08, 0x7E, 0xAA, 0x55,
0x02, 0x68, 0x2B, 0x23, 0xC6, 0x44, 0xB8, 0x44, 0x18, 0xEB, 0x56, 0xCF, 0x16, 0xA2,
0x48, 0x03, 0xC9, 0xE7, 0x4F, 0x87, 0xEB, 0x3D, 0x30, 0xC3, 0x15, 0x88, 0xBF, 0x20,
0xE7, 0x9D, 0xFF, 0x77, 0x0C, 0xDE, 0x1D, 0x24, 0x1E, 0x63, 0xA9, 0x4F, 0x8A, 0xBF,
0x5B, 0xBE, 0x60, 0x19, 0x68, 0x33, 0x3B, 0xFC, 0xED, 0x9F, 0x47, 0x4E, 0x5F, 0xF8,
0xEA, 0xCB, 0x3D, 0x00, 0xBD, 0x67, 0x01, 0xF9, 0x2C, 0x6D, 0xC6, 0xAC, 0x13, 0x64,
0xE7, 0x67, 0x14, 0xF3, 0xDC, 0x52, 0x69, 0x6A, 0xB9, 0x83, 0x2C, 0x42, 0x30, 0x13,
0x1B, 0xB2, 0xD8, 0xA5, 0x02, 0x0D, 0x79, 0xED, 0x96, 0xB1, 0x0D, 0xF8, 0xCC, 0x0C,
0xDF, 0x81, 0x95, 0x4F, 0x03, 0x58, 0x09, 0x57, 0x0E, 0x80, 0x69, 0x2E, 0xFE, 0xFF,
0x52, 0x77, 0xEA, 0x75, 0x28, 0xA8, 0xFB, 0xC9, 0xBE, 0xBF, 0x9F, 0xBB, 0xB7, 0x79,
0x8E, 0x18, 0x05, 0xE1, 0x80, 0xBD, 0x50, 0x34, 0x94, 0x81, 0xD3, 0x53, 0xC2, 0x69,
0xA2, 0xD2, 0x4C, 0xCF, 0x6C, 0xF4, 0x57, 0x2C, 0x10, 0x4A, 0x3F, 0xFB, 0x22, 0xFD,
0x8B, 0x97, 0xE2, 0xC9, 0x5B, 0xA6, 0x2B, 0xCD, 0xD6, 0x1B, 0x6B, 0xDB, 0x68, 0x7F,
0x4B, 0xC2, 0xA0, 0x50, 0x34, 0xC0, 0x05, 0xE5, 0x8D, 0xEF, 0x24, 0x67, 0xFF, 0x93,
0x40, 0xCF, 0x2D, 0x62, 0xA2, 0xA0, 0x50, 0xB1, 0xF1, 0x3A, 0xA8, 0x3D, 0xFD, 0x80,
0xD1, 0xF9, 0xB8, 0x05, 0x22, 0xAF, 0xC8, 0x35, 0x45, 0x90, 0x58, 0x8E, 0xE3, 0x3A,
0x7C, 0xBD, 0x3E, 0x27};
Prime1 = new CryptoPP::byte[0x80]{
0xFE, 0xF6, 0xBF, 0x1D, 0x69, 0xAB, 0x16, 0x25, 0x08, 0x47, 0x55, 0x6B, 0x86,
0xE4, 0x35, 0x88, 0x72, 0x2A, 0xB1, 0x3D, 0xF8, 0xB6, 0x44, 0xCA, 0xB3, 0xAB,
0x19, 0xD1, 0x04, 0x24, 0x28, 0x0A, 0x74, 0x55, 0xB8, 0x15, 0x45, 0x09, 0xCC,
0x13, 0x1C, 0xF2, 0xBA, 0x37, 0xA9, 0x03, 0x90, 0x8F, 0x02, 0x10, 0xFF, 0x25,
0x79, 0x86, 0xCC, 0x18, 0x50, 0x9A, 0x10, 0x5F, 0x5B, 0x4C, 0x1C, 0x4E, 0xB0,
0xA7, 0xE3, 0x59, 0xB1, 0x2D, 0xA0, 0xC6, 0xB0, 0x20, 0x2C, 0x21, 0x33, 0x12,
0xB3, 0xAF, 0x72, 0x34, 0x83, 0xCD, 0x52, 0x2F, 0xAF, 0x0F, 0x20, 0x5A, 0x1B,
0xC0, 0xE2, 0xA3, 0x76, 0x34, 0x0F, 0xD7, 0xFC, 0xC1, 0x41, 0xC9, 0xF9, 0x79,
0x40, 0x17, 0x42, 0x21, 0x3E, 0x9D, 0xFD, 0xC7, 0xC1, 0x50, 0xDE, 0x44, 0x5A,
0xC9, 0x31, 0x89, 0x6A, 0x78, 0x05, 0xBE, 0x65, 0xB4, 0xE8, 0x2D};
Prime2 = new CryptoPP::byte[0x80]{
0xC7, 0x9E, 0x47, 0x58, 0x00, 0x7D, 0x62, 0x82, 0xB0, 0xD2, 0x22, 0x81, 0xD4,
0xA8, 0x97, 0x1B, 0x79, 0x0C, 0x3A, 0xB0, 0xD7, 0xC9, 0x30, 0xE3, 0xC3, 0x53,
0x8E, 0x57, 0xEF, 0xF0, 0x9B, 0x9F, 0xB3, 0x90, 0x52, 0xC6, 0x94, 0x22, 0x36,
0xAA, 0xE6, 0x4A, 0x5F, 0x72, 0x1D, 0x70, 0xE8, 0x76, 0x58, 0xC8, 0xB2, 0x91,
0xCE, 0x9C, 0xC3, 0xE9, 0x09, 0x7F, 0x2E, 0x47, 0x97, 0xCC, 0x90, 0x39, 0x15,
0x35, 0x31, 0xDE, 0x1F, 0x0C, 0x8C, 0x0D, 0xC1, 0xC2, 0x92, 0xBE, 0x97, 0xBF,
0x2F, 0x91, 0xA1, 0x8C, 0x7D, 0x50, 0xA8, 0x21, 0x2F, 0xD7, 0xA2, 0x9A, 0x7E,
0xB5, 0xA7, 0x2A, 0x90, 0x02, 0xD9, 0xF3, 0x3D, 0xD1, 0xEB, 0xB8, 0xE0, 0x5A,
0x79, 0x9E, 0x7D, 0x8D, 0xCA, 0x18, 0x6D, 0xBD, 0x9E, 0xA1, 0x80, 0x28, 0x6B,
0x2A, 0xFE, 0x51, 0x24, 0x9B, 0x6F, 0x4D, 0x84, 0x77, 0x80, 0x23};
};
static constexpr CryptoPP::byte Prime2[] = {
0xC7, 0x9E, 0x47, 0x58, 0x00, 0x7D, 0x62, 0x82, 0xB0, 0xD2, 0x22, 0x81, 0xD4, 0xA8, 0x97,
0x1B, 0x79, 0x0C, 0x3A, 0xB0, 0xD7, 0xC9, 0x30, 0xE3, 0xC3, 0x53, 0x8E, 0x57, 0xEF, 0xF0,
0x9B, 0x9F, 0xB3, 0x90, 0x52, 0xC6, 0x94, 0x22, 0x36, 0xAA, 0xE6, 0x4A, 0x5F, 0x72, 0x1D,
0x70, 0xE8, 0x76, 0x58, 0xC8, 0xB2, 0x91, 0xCE, 0x9C, 0xC3, 0xE9, 0x09, 0x7F, 0x2E, 0x47,
0x97, 0xCC, 0x90, 0x39, 0x15, 0x35, 0x31, 0xDE, 0x1F, 0x0C, 0x8C, 0x0D, 0xC1, 0xC2, 0x92,
0xBE, 0x97, 0xBF, 0x2F, 0x91, 0xA1, 0x8C, 0x7D, 0x50, 0xA8, 0x21, 0x2F, 0xD7, 0xA2, 0x9A,
0x7E, 0xB5, 0xA7, 0x2A, 0x90, 0x02, 0xD9, 0xF3, 0x3D, 0xD1, 0xEB, 0xB8, 0xE0, 0x5A, 0x79,
0x9E, 0x7D, 0x8D, 0xCA, 0x18, 0x6D, 0xBD, 0x9E, 0xA1, 0x80, 0x28, 0x6B, 0x2A, 0xFE, 0x51,
0x24, 0x9B, 0x6F, 0x4D, 0x84, 0x77, 0x80, 0x23};
static constexpr CryptoPP::byte PrivateExponent[] = {
0x7F, 0x76, 0xCD, 0x0E, 0xE2, 0xD4, 0xDE, 0x05, 0x1C, 0xC6, 0xD9, 0xA8, 0x0E, 0x8D, 0xFA,
0x7B, 0xCA, 0x1E, 0xAA, 0x27, 0x1A, 0x40, 0xF8, 0xF1, 0x22, 0x87, 0x35, 0xDD, 0xDB, 0xFD,
0xEE, 0xF8, 0xC2, 0xBC, 0xBD, 0x01, 0xFB, 0x8B, 0xE2, 0x3E, 0x63, 0xB2, 0xB1, 0x22, 0x5C,
0x56, 0x49, 0x6E, 0x11, 0xBE, 0x07, 0x44, 0x0B, 0x9A, 0x26, 0x66, 0xD1, 0x49, 0x2C, 0x8F,
0xD3, 0x1B, 0xCF, 0xA4, 0xA1, 0xB8, 0xD1, 0xFB, 0xA4, 0x9E, 0xD2, 0x21, 0x28, 0x83, 0x09,
0x8A, 0xF6, 0xA0, 0x0B, 0xA3, 0xD6, 0x0F, 0x9B, 0x63, 0x68, 0xCC, 0xBC, 0x0C, 0x4E, 0x14,
0x5B, 0x27, 0xA4, 0xA9, 0xF4, 0x2B, 0xB9, 0xB8, 0x7B, 0xC0, 0xE6, 0x51, 0xAD, 0x1D, 0x77,
0xD4, 0x6B, 0xB9, 0xCE, 0x20, 0xD1, 0x26, 0x66, 0x7E, 0x5E, 0x9E, 0xA2, 0xE9, 0x6B, 0x90,
0xF3, 0x73, 0xB8, 0x52, 0x8F, 0x44, 0x11, 0x03, 0x0C, 0x13, 0x97, 0x39, 0x3D, 0x13, 0x22,
0x58, 0xD5, 0x43, 0x82, 0x49, 0xDA, 0x6E, 0x7C, 0xA1, 0xC5, 0x8C, 0xA5, 0xB0, 0x09, 0xE0,
0xCE, 0x3D, 0xDF, 0xF4, 0x9D, 0x3C, 0x97, 0x15, 0xE2, 0x6A, 0xC7, 0x2B, 0x3C, 0x50, 0x93,
0x23, 0xDB, 0xBA, 0x4A, 0x22, 0x66, 0x44, 0xAC, 0x78, 0xBB, 0x0E, 0x1A, 0x27, 0x43, 0xB5,
0x71, 0x67, 0xAF, 0xF4, 0xAB, 0x48, 0x46, 0x93, 0x73, 0xD0, 0x42, 0xAB, 0x93, 0x63, 0xE5,
0x6C, 0x9A, 0xDE, 0x50, 0x24, 0xC0, 0x23, 0x7D, 0x99, 0x79, 0x3F, 0x22, 0x07, 0xE0, 0xC1,
0x48, 0x56, 0x1B, 0xDF, 0x83, 0x09, 0x12, 0xB4, 0x2D, 0x45, 0x6B, 0xC9, 0xC0, 0x68, 0x85,
0x99, 0x90, 0x79, 0x96, 0x1A, 0xD7, 0xF5, 0x4D, 0x1F, 0x37, 0x83, 0x40, 0x4A, 0xEC, 0x39,
0x37, 0xA6, 0x80, 0x92, 0x7D, 0xC5, 0x80, 0xC7, 0xD6, 0x6F, 0xFE, 0x8A, 0x79, 0x89, 0xC6,
0xB1};
};
class DebugRifKeyset {
public:
// Constructor
// std::uint8_t* PrivateExponent;
const CryptoPP::byte* Exponent1;
static constexpr CryptoPP::byte Exponent1[] = {
0xCD, 0x9A, 0x61, 0xB0, 0xB8, 0xD5, 0xB4, 0xE4, 0xE4, 0xF6, 0xAB, 0xF7, 0x27, 0xB7, 0x56,
0x59, 0x6B, 0xB9, 0x11, 0xE7, 0xF4, 0x83, 0xAF, 0xB9, 0x73, 0x99, 0x7F, 0x49, 0xA2, 0x9C,
0xF0, 0xB5, 0x6D, 0x37, 0x82, 0x14, 0x15, 0xF1, 0x04, 0x8A, 0xD4, 0x8E, 0xEB, 0x2E, 0x1F,
0xE2, 0x81, 0xA9, 0x62, 0x6E, 0xB1, 0x68, 0x75, 0x62, 0xF3, 0x0F, 0xFE, 0xD4, 0x91, 0x87,
0x98, 0x78, 0xBF, 0x26, 0xB5, 0x07, 0x58, 0xD0, 0xEE, 0x3F, 0x21, 0xE8, 0xC8, 0x0F, 0x5F,
0xFA, 0x1C, 0x64, 0x74, 0x49, 0x52, 0xEB, 0xE7, 0xEE, 0xDE, 0xBA, 0x23, 0x26, 0x4A, 0xF6,
0x9C, 0x1A, 0x09, 0x3F, 0xB9, 0x0B, 0x36, 0x26, 0x1A, 0xBE, 0xA9, 0x76, 0xE6, 0xF2, 0x69,
0xDE, 0xFF, 0xAF, 0xCC, 0x0C, 0x9A, 0x66, 0x03, 0x86, 0x0A, 0x1F, 0x49, 0xA4, 0x10, 0xB6,
0xBC, 0xC3, 0x7C, 0x88, 0xE8, 0xCE, 0x4B, 0xD9};
// exponent2 = d mod (q - 1)
const CryptoPP::byte* Exponent2;
static constexpr CryptoPP::byte Exponent2[] = {
0xB3, 0x73, 0xA3, 0x59, 0xE6, 0x97, 0xC0, 0xAB, 0x3B, 0x68, 0xFC, 0x39, 0xAC, 0xDB, 0x44,
0xB1, 0xB4, 0x9E, 0x35, 0x4D, 0xBE, 0xC5, 0x36, 0x69, 0x6C, 0x3D, 0xC5, 0xFC, 0xFE, 0x4B,
0x2F, 0xDC, 0x86, 0x80, 0x46, 0x96, 0x40, 0x1A, 0x0D, 0x6E, 0xFA, 0x8C, 0xE0, 0x47, 0x91,
0xAC, 0xAD, 0x95, 0x2B, 0x8E, 0x1F, 0xF2, 0x0A, 0x45, 0xF8, 0x29, 0x95, 0x70, 0xC6, 0x88,
0x5F, 0x71, 0x03, 0x99, 0x79, 0xBC, 0x84, 0x71, 0xBD, 0xE8, 0x84, 0x8C, 0x0E, 0xD4, 0x7B,
0x30, 0x74, 0x57, 0x1A, 0x95, 0xE7, 0x90, 0x19, 0x8D, 0xAD, 0x8B, 0x4C, 0x4E, 0xC3, 0xE7,
0x6B, 0x23, 0x86, 0x01, 0xEE, 0x9B, 0xE0, 0x2F, 0x15, 0xA2, 0x2C, 0x4C, 0x39, 0xD3, 0xDF,
0x9C, 0x39, 0x01, 0xF1, 0x8C, 0x44, 0x4A, 0x15, 0x44, 0xDC, 0x51, 0xF7, 0x22, 0xD7, 0x7F,
0x41, 0x7F, 0x68, 0xFA, 0xEE, 0x56, 0xE8, 0x05};
// e
const CryptoPP::byte* PublicExponent;
static constexpr CryptoPP::byte PublicExponent[] = {0x00, 0x01, 0x00, 0x01};
// (InverseQ)(q) = 1 mod p
const CryptoPP::byte* Coefficient;
static constexpr CryptoPP::byte Coefficient[] = {
0xC0, 0x32, 0x43, 0xD3, 0x8C, 0x3D, 0xB4, 0xD2, 0x48, 0x8C, 0x42, 0x41, 0x24, 0x94, 0x6C,
0x80, 0xC9, 0xC1, 0x79, 0x36, 0x7F, 0xAC, 0xC3, 0xFF, 0x6A, 0x25, 0xEB, 0x2C, 0xFB, 0xD4,
0x2B, 0xA0, 0xEB, 0xFE, 0x25, 0xE9, 0xC6, 0x77, 0xCE, 0xFE, 0x2D, 0x23, 0xFE, 0xD0, 0xF4,
0x0F, 0xD9, 0x7E, 0xD5, 0xA5, 0x7D, 0x1F, 0xC0, 0xE8, 0xE8, 0xEC, 0x80, 0x5B, 0xC7, 0xFD,
0xE2, 0xBD, 0x94, 0xA6, 0x2B, 0xDD, 0x6A, 0x60, 0x45, 0x54, 0xAB, 0xCA, 0x42, 0x9C, 0x6A,
0x6C, 0xBF, 0x3C, 0x84, 0xF9, 0xA5, 0x0E, 0x63, 0x0C, 0x51, 0x58, 0x62, 0x6D, 0x5A, 0xB7,
0x3C, 0x3F, 0x49, 0x1A, 0xD0, 0x93, 0xB8, 0x4F, 0x1A, 0x6C, 0x5F, 0xC5, 0xE5, 0xA9, 0x75,
0xD4, 0x86, 0x9E, 0xDF, 0x87, 0x0F, 0x27, 0xB0, 0x26, 0x78, 0x4E, 0xFB, 0xC1, 0x8A, 0x4A,
0x24, 0x3F, 0x7F, 0x8F, 0x9A, 0x12, 0x51, 0xCB};
// n = p * q
const CryptoPP::byte* Modulus;
static constexpr CryptoPP::byte Modulus[] = {
0xC2, 0xD2, 0x44, 0xBC, 0xDD, 0x84, 0x3F, 0xD9, 0xC5, 0x22, 0xAF, 0xF7, 0xFC, 0x88, 0x8A,
0x33, 0x80, 0xED, 0x8E, 0xE2, 0xCC, 0x81, 0xF7, 0xEC, 0xF8, 0x1C, 0x79, 0xBF, 0x02, 0xBB,
0x12, 0x8E, 0x61, 0x68, 0x29, 0x1B, 0x15, 0xB6, 0x5E, 0xC6, 0xF8, 0xBF, 0x5A, 0xE0, 0x3B,
0x6A, 0x6C, 0xD9, 0xD6, 0xF5, 0x75, 0xAB, 0xA0, 0x6F, 0x34, 0x81, 0x34, 0x9A, 0x5B, 0xAD,
0xED, 0x31, 0xE3, 0xC6, 0xEA, 0x1A, 0xD1, 0x13, 0x22, 0xBB, 0xB3, 0xDA, 0xB3, 0xB2, 0x53,
0xBD, 0x45, 0x79, 0x87, 0xAD, 0x0A, 0x01, 0x72, 0x18, 0x10, 0x29, 0x49, 0xF4, 0x41, 0x7F,
0xD6, 0x47, 0x0C, 0x72, 0x92, 0x9E, 0xE9, 0xBB, 0x95, 0xA9, 0x5D, 0x79, 0xEB, 0xE4, 0x30,
0x76, 0x90, 0x45, 0x4B, 0x9D, 0x9C, 0xCF, 0x92, 0x03, 0x60, 0x8C, 0x4B, 0x6C, 0xB3, 0x7A,
0x3A, 0x05, 0x39, 0xA0, 0x66, 0xA9, 0x35, 0xCF, 0xB9, 0xFA, 0xAD, 0x9C, 0xAB, 0xEB, 0xE4,
0x6A, 0x8C, 0xE9, 0x3B, 0xCC, 0x72, 0x12, 0x62, 0x63, 0xBD, 0x80, 0xC4, 0xEE, 0x37, 0x2B,
0x32, 0x03, 0xA3, 0x09, 0xF7, 0xA0, 0x61, 0x57, 0xAD, 0x0D, 0xCF, 0x15, 0x98, 0x9E, 0x4E,
0x49, 0xF8, 0xB5, 0xA3, 0x5C, 0x27, 0xEE, 0x45, 0x04, 0xEA, 0xE4, 0x4B, 0xBC, 0x8F, 0x87,
0xED, 0x19, 0x1E, 0x46, 0x75, 0x63, 0xC4, 0x5B, 0xD5, 0xBC, 0x09, 0x2F, 0x02, 0x73, 0x19,
0x3C, 0x58, 0x55, 0x49, 0x66, 0x4C, 0x11, 0xEC, 0x0F, 0x09, 0xFA, 0xA5, 0x56, 0x0A, 0x5A,
0x63, 0x56, 0xAD, 0xA0, 0x0D, 0x86, 0x08, 0xC1, 0xE6, 0xB6, 0x13, 0x22, 0x49, 0x2F, 0x7C,
0xDB, 0x4C, 0x56, 0x97, 0x0E, 0xC2, 0xD9, 0x2E, 0x87, 0xBC, 0x0E, 0x67, 0xC0, 0x1B, 0x58,
0xBC, 0x64, 0x2B, 0xC2, 0x6E, 0xE2, 0x93, 0x2E, 0xB5, 0x6B, 0x70, 0xA4, 0x42, 0x9F, 0x64,
0xC1};
// p
const CryptoPP::byte* Prime1;
static constexpr CryptoPP::byte Prime1[] = {
0xE5, 0x62, 0xE1, 0x7F, 0x9F, 0x86, 0x08, 0xE2, 0x61, 0xD3, 0xD0, 0x42, 0xE2, 0xC4, 0xB6,
0xA8, 0x51, 0x09, 0x19, 0x14, 0xA4, 0x3A, 0x11, 0x4C, 0x33, 0xA5, 0x9C, 0x01, 0x5E, 0x34,
0xB6, 0x3F, 0x02, 0x1A, 0xCA, 0x47, 0xF1, 0x4F, 0x3B, 0x35, 0x2A, 0x07, 0x20, 0xEC, 0xD8,
0xC1, 0x15, 0xD9, 0xCA, 0x03, 0x4F, 0xB8, 0xE8, 0x09, 0x73, 0x3F, 0x85, 0xB7, 0x41, 0xD5,
0x51, 0x3E, 0x7B, 0xE3, 0x53, 0x2B, 0x48, 0x8B, 0x8E, 0xCB, 0xBA, 0xF7, 0xE0, 0x60, 0xF5,
0x35, 0x0E, 0x6F, 0xB0, 0xD9, 0x2A, 0x99, 0xD0, 0xFF, 0x60, 0x14, 0xED, 0x40, 0xEA, 0xF8,
0xD7, 0x0B, 0xC3, 0x8D, 0x8C, 0xE8, 0x81, 0xB3, 0x75, 0x93, 0x15, 0xB3, 0x7D, 0xF6, 0x39,
0x60, 0x1A, 0x00, 0xE7, 0xC3, 0x27, 0xAD, 0xA4, 0x33, 0xD5, 0x3E, 0xA4, 0x35, 0x48, 0x6F,
0x22, 0xEF, 0x5D, 0xDD, 0x7D, 0x7B, 0x61, 0x05};
// q
const CryptoPP::byte* Prime2;
const CryptoPP::byte* PrivateExponent;
// Constructor
DebugRifKeyset() {
// Initialize PrivateExponent
PrivateExponent = new CryptoPP::byte[0x100]{
0x01, 0x61, 0xAD, 0xD8, 0x9C, 0x06, 0x89, 0xD0, 0x60, 0xC8, 0x41, 0xF0, 0xB3, 0x83,
0x01, 0x5D, 0xE3, 0xA2, 0x6B, 0xA2, 0xBA, 0x9A, 0x0A, 0x58, 0xCD, 0x1A, 0xA0, 0x97,
0x64, 0xEC, 0xD0, 0x31, 0x1F, 0xCA, 0x36, 0x0E, 0x69, 0xDD, 0x40, 0xF7, 0x4E, 0xC0,
0xC6, 0xA3, 0x73, 0xF0, 0x69, 0x84, 0xB2, 0xF4, 0x4B, 0x29, 0x14, 0x2A, 0x6D, 0xB8,
0x23, 0xD8, 0x1B, 0x61, 0xD4, 0x9E, 0x87, 0xB3, 0xBB, 0xA9, 0xC4, 0x85, 0x4A, 0xF8,
0x03, 0x4A, 0xBF, 0xFE, 0xF9, 0xFE, 0x8B, 0xDD, 0x54, 0x83, 0xBA, 0xE0, 0x2F, 0x3F,
0xB1, 0xEF, 0xA5, 0x05, 0x5D, 0x28, 0x8B, 0xAB, 0xB5, 0xD0, 0x23, 0x2F, 0x8A, 0xCF,
0x48, 0x7C, 0xAA, 0xBB, 0xC8, 0x5B, 0x36, 0x27, 0xC5, 0x16, 0xA4, 0xB6, 0x61, 0xAC,
0x0C, 0x28, 0x47, 0x79, 0x3F, 0x38, 0xAE, 0x5E, 0x25, 0xC6, 0xAF, 0x35, 0xAE, 0xBC,
0xB0, 0xF3, 0xBC, 0xBD, 0xFD, 0xA4, 0x87, 0x0D, 0x14, 0x3D, 0x90, 0xE4, 0xDE, 0x5D,
0x1D, 0x46, 0x81, 0xF1, 0x28, 0x6D, 0x2F, 0x2C, 0x5E, 0x97, 0x2D, 0x89, 0x2A, 0x51,
0x72, 0x3C, 0x20, 0x02, 0x59, 0xB1, 0x98, 0x93, 0x05, 0x1E, 0x3F, 0xA1, 0x8A, 0x69,
0x30, 0x0E, 0x70, 0x84, 0x8B, 0xAE, 0x97, 0xA1, 0x08, 0x95, 0x63, 0x4C, 0xC7, 0xE8,
0x5D, 0x59, 0xCA, 0x78, 0x2A, 0x23, 0x87, 0xAC, 0x6F, 0x04, 0x33, 0xB1, 0x61, 0xB9,
0xF0, 0x95, 0xDA, 0x33, 0xCC, 0xE0, 0x4C, 0x82, 0x68, 0x82, 0x14, 0x51, 0xBE, 0x49,
0x1C, 0x58, 0xA2, 0x8B, 0x05, 0x4E, 0x98, 0x37, 0xEB, 0x94, 0x0B, 0x01, 0x22, 0xDC,
0xB3, 0x19, 0xCA, 0x77, 0xA6, 0x6E, 0x97, 0xFF, 0x8A, 0x53, 0x5A, 0xC5, 0x24, 0xE4,
0xAF, 0x6E, 0xA8, 0x2B, 0x53, 0xA4, 0xBE, 0x96, 0xA5, 0x7B, 0xCE, 0x22, 0x56, 0xA3,
0xF1, 0xCF, 0x14, 0xA5};
// Initialize Exponent1
Exponent1 = new CryptoPP::byte[0x80]{
0xCD, 0x9A, 0x61, 0xB0, 0xB8, 0xD5, 0xB4, 0xE4, 0xE4, 0xF6, 0xAB, 0xF7, 0x27,
0xB7, 0x56, 0x59, 0x6B, 0xB9, 0x11, 0xE7, 0xF4, 0x83, 0xAF, 0xB9, 0x73, 0x99,
0x7F, 0x49, 0xA2, 0x9C, 0xF0, 0xB5, 0x6D, 0x37, 0x82, 0x14, 0x15, 0xF1, 0x04,
0x8A, 0xD4, 0x8E, 0xEB, 0x2E, 0x1F, 0xE2, 0x81, 0xA9, 0x62, 0x6E, 0xB1, 0x68,
0x75, 0x62, 0xF3, 0x0F, 0xFE, 0xD4, 0x91, 0x87, 0x98, 0x78, 0xBF, 0x26, 0xB5,
0x07, 0x58, 0xD0, 0xEE, 0x3F, 0x21, 0xE8, 0xC8, 0x0F, 0x5F, 0xFA, 0x1C, 0x64,
0x74, 0x49, 0x52, 0xEB, 0xE7, 0xEE, 0xDE, 0xBA, 0x23, 0x26, 0x4A, 0xF6, 0x9C,
0x1A, 0x09, 0x3F, 0xB9, 0x0B, 0x36, 0x26, 0x1A, 0xBE, 0xA9, 0x76, 0xE6, 0xF2,
0x69, 0xDE, 0xFF, 0xAF, 0xCC, 0x0C, 0x9A, 0x66, 0x03, 0x86, 0x0A, 0x1F, 0x49,
0xA4, 0x10, 0xB6, 0xBC, 0xC3, 0x7C, 0x88, 0xE8, 0xCE, 0x4B, 0xD9
};
Exponent2 = new CryptoPP::byte[0x80]{
0xB3, 0x73, 0xA3, 0x59, 0xE6, 0x97, 0xC0, 0xAB, 0x3B, 0x68, 0xFC, 0x39, 0xAC,
0xDB, 0x44, 0xB1, 0xB4, 0x9E, 0x35, 0x4D, 0xBE, 0xC5, 0x36, 0x69, 0x6C, 0x3D,
0xC5, 0xFC, 0xFE, 0x4B, 0x2F, 0xDC, 0x86, 0x80, 0x46, 0x96, 0x40, 0x1A, 0x0D,
0x6E, 0xFA, 0x8C, 0xE0, 0x47, 0x91, 0xAC, 0xAD, 0x95, 0x2B, 0x8E, 0x1F, 0xF2,
0x0A, 0x45, 0xF8, 0x29, 0x95, 0x70, 0xC6, 0x88, 0x5F, 0x71, 0x03, 0x99, 0x79,
0xBC, 0x84, 0x71, 0xBD, 0xE8, 0x84, 0x8C, 0x0E, 0xD4, 0x7B, 0x30, 0x74, 0x57,
0x1A, 0x95, 0xE7, 0x90, 0x19, 0x8D, 0xAD, 0x8B, 0x4C, 0x4E, 0xC3, 0xE7, 0x6B,
0x23, 0x86, 0x01, 0xEE, 0x9B, 0xE0, 0x2F, 0x15, 0xA2, 0x2C, 0x4C, 0x39, 0xD3,
0xDF, 0x9C, 0x39, 0x01, 0xF1, 0x8C, 0x44, 0x4A, 0x15, 0x44, 0xDC, 0x51, 0xF7,
0x22, 0xD7, 0x7F, 0x41, 0x7F, 0x68, 0xFA, 0xEE, 0x56, 0xE8, 0x05};
PublicExponent = new CryptoPP::byte[4]{0x00, 0x01, 0x00, 0x01};
Coefficient = new CryptoPP::byte[0x80]{
0xC0, 0x32, 0x43, 0xD3, 0x8C, 0x3D, 0xB4, 0xD2, 0x48, 0x8C, 0x42, 0x41, 0x24,
0x94, 0x6C, 0x80, 0xC9, 0xC1, 0x79, 0x36, 0x7F, 0xAC, 0xC3, 0xFF, 0x6A, 0x25,
0xEB, 0x2C, 0xFB, 0xD4, 0x2B, 0xA0, 0xEB, 0xFE, 0x25, 0xE9, 0xC6, 0x77, 0xCE,
0xFE, 0x2D, 0x23, 0xFE, 0xD0, 0xF4, 0x0F, 0xD9, 0x7E, 0xD5, 0xA5, 0x7D, 0x1F,
0xC0, 0xE8, 0xE8, 0xEC, 0x80, 0x5B, 0xC7, 0xFD, 0xE2, 0xBD, 0x94, 0xA6, 0x2B,
0xDD, 0x6A, 0x60, 0x45, 0x54, 0xAB, 0xCA, 0x42, 0x9C, 0x6A, 0x6C, 0xBF, 0x3C,
0x84, 0xF9, 0xA5, 0x0E, 0x63, 0x0C, 0x51, 0x58, 0x62, 0x6D, 0x5A, 0xB7, 0x3C,
0x3F, 0x49, 0x1A, 0xD0, 0x93, 0xB8, 0x4F, 0x1A, 0x6C, 0x5F, 0xC5, 0xE5, 0xA9,
0x75, 0xD4, 0x86, 0x9E, 0xDF, 0x87, 0x0F, 0x27, 0xB0, 0x26, 0x78, 0x4E, 0xFB,
0xC1, 0x8A, 0x4A, 0x24, 0x3F, 0x7F, 0x8F, 0x9A, 0x12, 0x51, 0xCB};
Modulus = new CryptoPP::byte[0x100]{
0xC2, 0xD2, 0x44, 0xBC, 0xDD, 0x84, 0x3F, 0xD9, 0xC5, 0x22, 0xAF, 0xF7, 0xFC, 0x88,
0x8A, 0x33, 0x80, 0xED, 0x8E, 0xE2, 0xCC, 0x81, 0xF7, 0xEC, 0xF8, 0x1C, 0x79, 0xBF,
0x02, 0xBB, 0x12, 0x8E, 0x61, 0x68, 0x29, 0x1B, 0x15, 0xB6, 0x5E, 0xC6, 0xF8, 0xBF,
0x5A, 0xE0, 0x3B, 0x6A, 0x6C, 0xD9, 0xD6, 0xF5, 0x75, 0xAB, 0xA0, 0x6F, 0x34, 0x81,
0x34, 0x9A, 0x5B, 0xAD, 0xED, 0x31, 0xE3, 0xC6, 0xEA, 0x1A, 0xD1, 0x13, 0x22, 0xBB,
0xB3, 0xDA, 0xB3, 0xB2, 0x53, 0xBD, 0x45, 0x79, 0x87, 0xAD, 0x0A, 0x01, 0x72, 0x18,
0x10, 0x29, 0x49, 0xF4, 0x41, 0x7F, 0xD6, 0x47, 0x0C, 0x72, 0x92, 0x9E, 0xE9, 0xBB,
0x95, 0xA9, 0x5D, 0x79, 0xEB, 0xE4, 0x30, 0x76, 0x90, 0x45, 0x4B, 0x9D, 0x9C, 0xCF,
0x92, 0x03, 0x60, 0x8C, 0x4B, 0x6C, 0xB3, 0x7A, 0x3A, 0x05, 0x39, 0xA0, 0x66, 0xA9,
0x35, 0xCF, 0xB9, 0xFA, 0xAD, 0x9C, 0xAB, 0xEB, 0xE4, 0x6A, 0x8C, 0xE9, 0x3B, 0xCC,
0x72, 0x12, 0x62, 0x63, 0xBD, 0x80, 0xC4, 0xEE, 0x37, 0x2B, 0x32, 0x03, 0xA3, 0x09,
0xF7, 0xA0, 0x61, 0x57, 0xAD, 0x0D, 0xCF, 0x15, 0x98, 0x9E, 0x4E, 0x49, 0xF8, 0xB5,
0xA3, 0x5C, 0x27, 0xEE, 0x45, 0x04, 0xEA, 0xE4, 0x4B, 0xBC, 0x8F, 0x87, 0xED, 0x19,
0x1E, 0x46, 0x75, 0x63, 0xC4, 0x5B, 0xD5, 0xBC, 0x09, 0x2F, 0x02, 0x73, 0x19, 0x3C,
0x58, 0x55, 0x49, 0x66, 0x4C, 0x11, 0xEC, 0x0F, 0x09, 0xFA, 0xA5, 0x56, 0x0A, 0x5A,
0x63, 0x56, 0xAD, 0xA0, 0x0D, 0x86, 0x08, 0xC1, 0xE6, 0xB6, 0x13, 0x22, 0x49, 0x2F,
0x7C, 0xDB, 0x4C, 0x56, 0x97, 0x0E, 0xC2, 0xD9, 0x2E, 0x87, 0xBC, 0x0E, 0x67, 0xC0,
0x1B, 0x58, 0xBC, 0x64, 0x2B, 0xC2, 0x6E, 0xE2, 0x93, 0x2E, 0xB5, 0x6B, 0x70, 0xA4,
0x42, 0x9F, 0x64, 0xC1};
Prime1 = new CryptoPP::byte[0x80]{
0xE5, 0x62, 0xE1, 0x7F, 0x9F, 0x86, 0x08, 0xE2, 0x61, 0xD3, 0xD0, 0x42, 0xE2,
0xC4, 0xB6, 0xA8, 0x51, 0x09, 0x19, 0x14, 0xA4, 0x3A, 0x11, 0x4C, 0x33, 0xA5,
0x9C, 0x01, 0x5E, 0x34, 0xB6, 0x3F, 0x02, 0x1A, 0xCA, 0x47, 0xF1, 0x4F, 0x3B,
0x35, 0x2A, 0x07, 0x20, 0xEC, 0xD8, 0xC1, 0x15, 0xD9, 0xCA, 0x03, 0x4F, 0xB8,
0xE8, 0x09, 0x73, 0x3F, 0x85, 0xB7, 0x41, 0xD5, 0x51, 0x3E, 0x7B, 0xE3, 0x53,
0x2B, 0x48, 0x8B, 0x8E, 0xCB, 0xBA, 0xF7, 0xE0, 0x60, 0xF5, 0x35, 0x0E, 0x6F,
0xB0, 0xD9, 0x2A, 0x99, 0xD0, 0xFF, 0x60, 0x14, 0xED, 0x40, 0xEA, 0xF8, 0xD7,
0x0B, 0xC3, 0x8D, 0x8C, 0xE8, 0x81, 0xB3, 0x75, 0x93, 0x15, 0xB3, 0x7D, 0xF6,
0x39, 0x60, 0x1A, 0x00, 0xE7, 0xC3, 0x27, 0xAD, 0xA4, 0x33, 0xD5, 0x3E, 0xA4,
0x35, 0x48, 0x6F, 0x22, 0xEF, 0x5D, 0xDD, 0x7D, 0x7B, 0x61, 0x05};
Prime2 = new CryptoPP::byte[0x80]{
0xD9, 0x6C, 0xC2, 0x0C, 0xF7, 0xAE, 0xD1, 0xF3, 0x3B, 0x3B, 0x49, 0x1E, 0x9F,
0x12, 0x9C, 0xA1, 0x78, 0x1F, 0x35, 0x1D, 0x98, 0x26, 0x13, 0x71, 0xF9, 0x09,
0xFD, 0xF0, 0xAD, 0x38, 0x55, 0xB7, 0xEE, 0x61, 0x04, 0x72, 0x51, 0x87, 0x2E,
0x05, 0x84, 0xB1, 0x1D, 0x0C, 0x0D, 0xDB, 0xD4, 0x25, 0x3E, 0x26, 0xED, 0xEA,
0xB8, 0xF7, 0x49, 0xFE, 0xA2, 0x94, 0xE6, 0xF2, 0x08, 0x92, 0xA7, 0x85, 0xF5,
0x30, 0xB9, 0x84, 0x22, 0xBF, 0xCA, 0xF0, 0x5F, 0xCB, 0x31, 0x20, 0x34, 0x49,
0x16, 0x76, 0x34, 0xCC, 0x7A, 0xCB, 0x96, 0xFE, 0x78, 0x7A, 0x41, 0xFE, 0x9A,
0xA2, 0x23, 0xF7, 0x68, 0x80, 0xD6, 0xCE, 0x4A, 0x78, 0xA5, 0xB7, 0x05, 0x77,
0x81, 0x1F, 0xDE, 0x5E, 0xA8, 0x6E, 0x3E, 0x87, 0xEC, 0x44, 0xD2, 0x69, 0xC6,
0x54, 0x91, 0x6B, 0x5E, 0x13, 0x8A, 0x03, 0x87, 0x05, 0x31, 0x8D};
};
static constexpr CryptoPP::byte Prime2[] = {
0xD9, 0x6C, 0xC2, 0x0C, 0xF7, 0xAE, 0xD1, 0xF3, 0x3B, 0x3B, 0x49, 0x1E, 0x9F, 0x12, 0x9C,
0xA1, 0x78, 0x1F, 0x35, 0x1D, 0x98, 0x26, 0x13, 0x71, 0xF9, 0x09, 0xFD, 0xF0, 0xAD, 0x38,
0x55, 0xB7, 0xEE, 0x61, 0x04, 0x72, 0x51, 0x87, 0x2E, 0x05, 0x84, 0xB1, 0x1D, 0x0C, 0x0D,
0xDB, 0xD4, 0x25, 0x3E, 0x26, 0xED, 0xEA, 0xB8, 0xF7, 0x49, 0xFE, 0xA2, 0x94, 0xE6, 0xF2,
0x08, 0x92, 0xA7, 0x85, 0xF5, 0x30, 0xB9, 0x84, 0x22, 0xBF, 0xCA, 0xF0, 0x5F, 0xCB, 0x31,
0x20, 0x34, 0x49, 0x16, 0x76, 0x34, 0xCC, 0x7A, 0xCB, 0x96, 0xFE, 0x78, 0x7A, 0x41, 0xFE,
0x9A, 0xA2, 0x23, 0xF7, 0x68, 0x80, 0xD6, 0xCE, 0x4A, 0x78, 0xA5, 0xB7, 0x05, 0x77, 0x81,
0x1F, 0xDE, 0x5E, 0xA8, 0x6E, 0x3E, 0x87, 0xEC, 0x44, 0xD2, 0x69, 0xC6, 0x54, 0x91, 0x6B,
0x5E, 0x13, 0x8A, 0x03, 0x87, 0x05, 0x31, 0x8D};
static constexpr CryptoPP::byte PrivateExponent[] = {
0x01, 0x61, 0xAD, 0xD8, 0x9C, 0x06, 0x89, 0xD0, 0x60, 0xC8, 0x41, 0xF0, 0xB3, 0x83, 0x01,
0x5D, 0xE3, 0xA2, 0x6B, 0xA2, 0xBA, 0x9A, 0x0A, 0x58, 0xCD, 0x1A, 0xA0, 0x97, 0x64, 0xEC,
0xD0, 0x31, 0x1F, 0xCA, 0x36, 0x0E, 0x69, 0xDD, 0x40, 0xF7, 0x4E, 0xC0, 0xC6, 0xA3, 0x73,
0xF0, 0x69, 0x84, 0xB2, 0xF4, 0x4B, 0x29, 0x14, 0x2A, 0x6D, 0xB8, 0x23, 0xD8, 0x1B, 0x61,
0xD4, 0x9E, 0x87, 0xB3, 0xBB, 0xA9, 0xC4, 0x85, 0x4A, 0xF8, 0x03, 0x4A, 0xBF, 0xFE, 0xF9,
0xFE, 0x8B, 0xDD, 0x54, 0x83, 0xBA, 0xE0, 0x2F, 0x3F, 0xB1, 0xEF, 0xA5, 0x05, 0x5D, 0x28,
0x8B, 0xAB, 0xB5, 0xD0, 0x23, 0x2F, 0x8A, 0xCF, 0x48, 0x7C, 0xAA, 0xBB, 0xC8, 0x5B, 0x36,
0x27, 0xC5, 0x16, 0xA4, 0xB6, 0x61, 0xAC, 0x0C, 0x28, 0x47, 0x79, 0x3F, 0x38, 0xAE, 0x5E,
0x25, 0xC6, 0xAF, 0x35, 0xAE, 0xBC, 0xB0, 0xF3, 0xBC, 0xBD, 0xFD, 0xA4, 0x87, 0x0D, 0x14,
0x3D, 0x90, 0xE4, 0xDE, 0x5D, 0x1D, 0x46, 0x81, 0xF1, 0x28, 0x6D, 0x2F, 0x2C, 0x5E, 0x97,
0x2D, 0x89, 0x2A, 0x51, 0x72, 0x3C, 0x20, 0x02, 0x59, 0xB1, 0x98, 0x93, 0x05, 0x1E, 0x3F,
0xA1, 0x8A, 0x69, 0x30, 0x0E, 0x70, 0x84, 0x8B, 0xAE, 0x97, 0xA1, 0x08, 0x95, 0x63, 0x4C,
0xC7, 0xE8, 0x5D, 0x59, 0xCA, 0x78, 0x2A, 0x23, 0x87, 0xAC, 0x6F, 0x04, 0x33, 0xB1, 0x61,
0xB9, 0xF0, 0x95, 0xDA, 0x33, 0xCC, 0xE0, 0x4C, 0x82, 0x68, 0x82, 0x14, 0x51, 0xBE, 0x49,
0x1C, 0x58, 0xA2, 0x8B, 0x05, 0x4E, 0x98, 0x37, 0xEB, 0x94, 0x0B, 0x01, 0x22, 0xDC, 0xB3,
0x19, 0xCA, 0x77, 0xA6, 0x6E, 0x97, 0xFF, 0x8A, 0x53, 0x5A, 0xC5, 0x24, 0xE4, 0xAF, 0x6E,
0xA8, 0x2B, 0x53, 0xA4, 0xBE, 0x96, 0xA5, 0x7B, 0xCE, 0x22, 0x56, 0xA3, 0xF1, 0xCF, 0x14,
0xA5};
};
class PkgDerivedKey3Keyset {
public:
// PkgDerivedKey3Keyset();
//~PkgDerivedKey3Keyset();
// Constructor
// std::uint8_t* PrivateExponent;
const CryptoPP::byte* Exponent1;
static constexpr CryptoPP::byte Exponent1[] = {
0x52, 0xCC, 0x2D, 0xA0, 0x9C, 0x9E, 0x75, 0xE7, 0x28, 0xEE, 0x3D, 0xDE, 0xE3, 0x45, 0xD1,
0x4F, 0x94, 0x1C, 0xCC, 0xC8, 0x87, 0x29, 0x45, 0x3B, 0x8D, 0x6E, 0xAB, 0x6E, 0x2A, 0xA7,
0xC7, 0x15, 0x43, 0xA3, 0x04, 0x8F, 0x90, 0x5F, 0xEB, 0xF3, 0x38, 0x4A, 0x77, 0xFA, 0x36,
0xB7, 0x15, 0x76, 0xB6, 0x01, 0x1A, 0x8E, 0x25, 0x87, 0x82, 0xF1, 0x55, 0xD8, 0xC6, 0x43,
0x2A, 0xC0, 0xE5, 0x98, 0xC9, 0x32, 0xD1, 0x94, 0x6F, 0xD9, 0x01, 0xBA, 0x06, 0x81, 0xE0,
0x6D, 0x88, 0xF2, 0x24, 0x2A, 0x25, 0x01, 0x64, 0x5C, 0xBF, 0xF2, 0xD9, 0x99, 0x67, 0x3E,
0xF6, 0x72, 0xEE, 0xE4, 0xE2, 0x33, 0x5C, 0xF8, 0x00, 0x40, 0xE3, 0x2A, 0x9A, 0xF4, 0x3D,
0x22, 0x86, 0x44, 0x3C, 0xFB, 0x0A, 0xA5, 0x7C, 0x3F, 0xCC, 0xF5, 0xF1, 0x16, 0xC4, 0xAC,
0x88, 0xB4, 0xDE, 0x62, 0x94, 0x92, 0x6A, 0x13};
// exponent2 = d mod (q - 1)
const CryptoPP::byte* Exponent2;
static constexpr CryptoPP::byte Exponent2[] = {
0x7C, 0x9D, 0xAD, 0x39, 0xE0, 0xD5, 0x60, 0x14, 0x94, 0x48, 0x19, 0x7F, 0x88, 0x95, 0xD5,
0x8B, 0x80, 0xAD, 0x85, 0x8A, 0x4B, 0x77, 0x37, 0x85, 0xD0, 0x77, 0xBB, 0xBF, 0x89, 0x71,
0x4A, 0x72, 0xCB, 0x72, 0x68, 0x38, 0xEC, 0x02, 0xC6, 0x7D, 0xC6, 0x44, 0x06, 0x33, 0x51,
0x1C, 0xC0, 0xFF, 0x95, 0x8F, 0x0D, 0x75, 0xDC, 0x25, 0xBB, 0x0B, 0x73, 0x91, 0xA9, 0x6D,
0x42, 0xD8, 0x03, 0xB7, 0x68, 0xD4, 0x1E, 0x75, 0x62, 0xA3, 0x70, 0x35, 0x79, 0x78, 0x00,
0xC8, 0xF5, 0xEF, 0x15, 0xB9, 0xFC, 0x4E, 0x47, 0x5A, 0xC8, 0x70, 0x70, 0x5B, 0x52, 0x98,
0xC0, 0xC2, 0x58, 0x4A, 0x70, 0x96, 0xCC, 0xB8, 0x10, 0xE1, 0x2F, 0x78, 0x8B, 0x2B, 0xA1,
0x7F, 0xF9, 0xAC, 0xDE, 0xF0, 0xBB, 0x2B, 0xE2, 0x66, 0xE3, 0x22, 0x92, 0x31, 0x21, 0x57,
0x92, 0xC4, 0xB8, 0xF2, 0x3E, 0x76, 0x20, 0x37};
// e
const CryptoPP::byte* PublicExponent;
static constexpr CryptoPP::byte PublicExponent[] = {0, 1, 0, 1};
// (InverseQ)(q) = 1 mod p
const CryptoPP::byte* Coefficient;
static constexpr CryptoPP::byte Coefficient[] = {
0x45, 0x97, 0x55, 0xD4, 0x22, 0x08, 0x5E, 0xF3, 0x5C, 0xB4, 0x05, 0x7A, 0xFD, 0xAA, 0x42,
0x42, 0xAD, 0x9A, 0x8C, 0xA0, 0x6C, 0xBB, 0x1D, 0x68, 0x54, 0x54, 0x6E, 0x3E, 0x32, 0xE3,
0x53, 0x73, 0x76, 0xF1, 0x3E, 0x01, 0xEA, 0xD3, 0xCF, 0xEB, 0xEB, 0x23, 0x3E, 0xC0, 0xBE,
0xCE, 0xEC, 0x2C, 0x89, 0x5F, 0xA8, 0x27, 0x3A, 0x4C, 0xB7, 0xE6, 0x74, 0xBC, 0x45, 0x4C,
0x26, 0xC8, 0x25, 0xFF, 0x34, 0x63, 0x25, 0x37, 0xE1, 0x48, 0x10, 0xC1, 0x93, 0xA6, 0xAF,
0xEB, 0xBA, 0xE3, 0xA2, 0xF1, 0x3D, 0xEF, 0x63, 0xD8, 0xF4, 0xFD, 0xD3, 0xEE, 0xE2, 0x5D,
0xE9, 0x33, 0xCC, 0xAD, 0xBA, 0x75, 0x5C, 0x85, 0xAF, 0xCE, 0xA9, 0x3D, 0xD1, 0xA2, 0x17,
0xF3, 0xF6, 0x98, 0xB3, 0x50, 0x8E, 0x5E, 0xF6, 0xEB, 0x02, 0x8E, 0xA1, 0x62, 0xA7, 0xD6,
0x2C, 0xEC, 0x91, 0xFF, 0x15, 0x40, 0xD2, 0xE3};
// n = p * q
const CryptoPP::byte* Modulus;
static constexpr CryptoPP::byte Modulus[] = {
0xd2, 0x12, 0xfc, 0x33, 0x5f, 0x6d, 0xdb, 0x83, 0x16, 0x09, 0x62, 0x8b, 0x03, 0x56, 0x27,
0x37, 0x82, 0xd4, 0x77, 0x85, 0x35, 0x29, 0x39, 0x2d, 0x52, 0x6b, 0x8c, 0x4c, 0x8c, 0xfb,
0x06, 0xc1, 0x84, 0x5b, 0xe7, 0xd4, 0xf7, 0xbc, 0xd2, 0x4e, 0x62, 0x45, 0xcd, 0x2a, 0xbb,
0xd7, 0x77, 0x76, 0x45, 0x36, 0x55, 0x27, 0x3f, 0xb3, 0xf5, 0xf9, 0x8e, 0xda, 0x4b, 0xef,
0xaa, 0x59, 0xae, 0xb3, 0x9b, 0xea, 0x54, 0x98, 0xd2, 0x06, 0x32, 0x6a, 0x58, 0x31, 0x2a,
0xe0, 0xd4, 0x4f, 0x90, 0xb5, 0x0a, 0x7d, 0xec, 0xf4, 0x3a, 0x9c, 0x52, 0x67, 0x2d, 0x99,
0x31, 0x8e, 0x0c, 0x43, 0xe6, 0x82, 0xfe, 0x07, 0x46, 0xe1, 0x2e, 0x50, 0xd4, 0x1f, 0x2d,
0x2f, 0x7e, 0xd9, 0x08, 0xba, 0x06, 0xb3, 0xbf, 0x2e, 0x20, 0x3f, 0x4e, 0x3f, 0xfe, 0x44,
0xff, 0xaa, 0x50, 0x43, 0x57, 0x91, 0x69, 0x94, 0x49, 0x15, 0x82, 0x82, 0xe4, 0x0f, 0x4c,
0x8d, 0x9d, 0x2c, 0xc9, 0x5b, 0x1d, 0x64, 0xbf, 0x88, 0x8b, 0xd4, 0xc5, 0x94, 0xe7, 0x65,
0x47, 0x84, 0x1e, 0xe5, 0x79, 0x10, 0xfb, 0x98, 0x93, 0x47, 0xb9, 0x7d, 0x85, 0x12, 0xa6,
0x40, 0x98, 0x2c, 0xf7, 0x92, 0xbc, 0x95, 0x19, 0x32, 0xed, 0xe8, 0x90, 0x56, 0x0d, 0x65,
0xc1, 0xaa, 0x78, 0xc6, 0x2e, 0x54, 0xfd, 0x5f, 0x54, 0xa1, 0xf6, 0x7e, 0xe5, 0xe0, 0x5f,
0x61, 0xc1, 0x20, 0xb4, 0xb9, 0xb4, 0x33, 0x08, 0x70, 0xe4, 0xdf, 0x89, 0x56, 0xed, 0x01,
0x29, 0x46, 0x77, 0x5f, 0x8c, 0xb8, 0xa9, 0xf5, 0x1e, 0x2e, 0xb3, 0xb9, 0xbf, 0xe0, 0x09,
0xb7, 0x8d, 0x28, 0xd4, 0xa6, 0xc3, 0xb8, 0x1e, 0x1f, 0x07, 0xeb, 0xb4, 0x12, 0x0b, 0x95,
0xb8, 0x85, 0x30, 0xfd, 0xdc, 0x39, 0x13, 0xd0, 0x7c, 0xdc, 0x8f, 0xed, 0xf9, 0xc9, 0xa3,
0xc1};
// p
const CryptoPP::byte* Prime1;
static constexpr CryptoPP::byte Prime1[] = {
0xF9, 0x67, 0xAD, 0x99, 0x12, 0x31, 0x0C, 0x56, 0xA2, 0x2E, 0x16, 0x1C, 0x46, 0xB3, 0x4D,
0x5B, 0x43, 0xBE, 0x42, 0xA2, 0xF6, 0x86, 0x96, 0x80, 0x42, 0xC3, 0xC7, 0x3F, 0xC3, 0x42,
0xF5, 0x87, 0x49, 0x33, 0x9F, 0x07, 0x5D, 0x6E, 0x2C, 0x04, 0xFD, 0xE3, 0xE1, 0xB2, 0xAE,
0x0A, 0x0C, 0xF0, 0xC7, 0xA6, 0x1C, 0xA1, 0x63, 0x50, 0xC8, 0x09, 0x9C, 0x51, 0x24, 0x52,
0x6C, 0x5E, 0x5E, 0xBD, 0x1E, 0x27, 0x06, 0xBB, 0xBC, 0x9E, 0x94, 0xE1, 0x35, 0xD4, 0x6D,
0xB3, 0xCB, 0x3C, 0x68, 0xDD, 0x68, 0xB3, 0xFE, 0x6C, 0xCB, 0x8D, 0x82, 0x20, 0x76, 0x23,
0x63, 0xB7, 0xE9, 0x68, 0x10, 0x01, 0x4E, 0xDC, 0xBA, 0x27, 0x5D, 0x01, 0xC1, 0x2D, 0x80,
0x5E, 0x2B, 0xAF, 0x82, 0x6B, 0xD8, 0x84, 0xB6, 0x10, 0x52, 0x86, 0xA7, 0x89, 0x8E, 0xAE,
0x9A, 0xE2, 0x89, 0xC6, 0xF7, 0xD5, 0x87, 0xFB};
// q
const CryptoPP::byte* Prime2;
const CryptoPP::byte* PrivateExponent;
PkgDerivedKey3Keyset() {
Prime1 = new CryptoPP::byte[0x80]{
0xF9, 0x67, 0xAD, 0x99, 0x12, 0x31, 0x0C, 0x56, 0xA2, 0x2E, 0x16, 0x1C, 0x46,
0xB3, 0x4D, 0x5B, 0x43, 0xBE, 0x42, 0xA2, 0xF6, 0x86, 0x96, 0x80, 0x42, 0xC3,
0xC7, 0x3F, 0xC3, 0x42, 0xF5, 0x87, 0x49, 0x33, 0x9F, 0x07, 0x5D, 0x6E, 0x2C,
0x04, 0xFD, 0xE3, 0xE1, 0xB2, 0xAE, 0x0A, 0x0C, 0xF0, 0xC7, 0xA6, 0x1C, 0xA1,
0x63, 0x50, 0xC8, 0x09, 0x9C, 0x51, 0x24, 0x52, 0x6C, 0x5E, 0x5E, 0xBD, 0x1E,
0x27, 0x06, 0xBB, 0xBC, 0x9E, 0x94, 0xE1, 0x35, 0xD4, 0x6D, 0xB3, 0xCB, 0x3C,
0x68, 0xDD, 0x68, 0xB3, 0xFE, 0x6C, 0xCB, 0x8D, 0x82, 0x20, 0x76, 0x23, 0x63,
0xB7, 0xE9, 0x68, 0x10, 0x01, 0x4E, 0xDC, 0xBA, 0x27, 0x5D, 0x01, 0xC1, 0x2D,
0x80, 0x5E, 0x2B, 0xAF, 0x82, 0x6B, 0xD8, 0x84, 0xB6, 0x10, 0x52, 0x86, 0xA7,
0x89, 0x8E, 0xAE, 0x9A, 0xE2, 0x89, 0xC6, 0xF7, 0xD5, 0x87, 0xFB};
Prime2 = new CryptoPP::byte[0x80]{
0xD7, 0xA1, 0x0F, 0x9A, 0x8B, 0xF2, 0xC9, 0x11, 0x95, 0x32, 0x9A, 0x8C, 0xF0,
0xD9, 0x40, 0x47, 0xF5, 0x68, 0xA0, 0x0D, 0xBD, 0xC1, 0xFC, 0x43, 0x2F, 0x65,
0xF9, 0xC3, 0x61, 0x0F, 0x25, 0x77, 0x54, 0xAD, 0xD7, 0x58, 0xAC, 0x84, 0x40,
0x60, 0x8D, 0x3F, 0xF3, 0x65, 0x89, 0x75, 0xB5, 0xC6, 0x2C, 0x51, 0x1A, 0x2F,
0x1F, 0x22, 0xE4, 0x43, 0x11, 0x54, 0xBE, 0xC9, 0xB4, 0xC7, 0xB5, 0x1B, 0x05,
0x0B, 0xBC, 0x56, 0x9A, 0xCD, 0x4A, 0xD9, 0x73, 0x68, 0x5E, 0x5C, 0xFB, 0x92,
0xB7, 0x8B, 0x0D, 0xFF, 0xF5, 0x07, 0xCA, 0xB4, 0xC8, 0x9B, 0x96, 0x3C, 0x07,
0x9E, 0x3E, 0x6B, 0x2A, 0x11, 0xF2, 0x8A, 0xB1, 0x8A, 0xD7, 0x2E, 0x1B, 0xA5,
0x53, 0x24, 0x06, 0xED, 0x50, 0xB8, 0x90, 0x67, 0xB1, 0xE2, 0x41, 0xC6, 0x92,
0x01, 0xEE, 0x10, 0xF0, 0x61, 0xBB, 0xFB, 0xB2, 0x7D, 0x4A, 0x73};
PrivateExponent = new CryptoPP::byte[0x100]{
0x32, 0xD9, 0x03, 0x90, 0x8F, 0xBD, 0xB0, 0x8F, 0x57, 0x2B, 0x28, 0x5E, 0x0B, 0x8D,
0xB3, 0xEA, 0x5C, 0xD1, 0x7E, 0xA8, 0x90, 0x88, 0x8C, 0xDD, 0x6A, 0x80, 0xBB, 0xB1,
0xDF, 0xC1, 0xF7, 0x0D, 0xAA, 0x32, 0xF0, 0xB7, 0x7C, 0xCB, 0x88, 0x80, 0x0E, 0x8B,
0x64, 0xB0, 0xBE, 0x4C, 0xD6, 0x0E, 0x9B, 0x8C, 0x1E, 0x2A, 0x64, 0xE1, 0xF3, 0x5C,
0xD7, 0x76, 0x01, 0x41, 0x5E, 0x93, 0x5C, 0x94, 0xFE, 0xDD, 0x46, 0x62, 0xC3, 0x1B,
0x5A, 0xE2, 0xA0, 0xBC, 0x2D, 0xEB, 0xC3, 0x98, 0x0A, 0xA7, 0xB7, 0x85, 0x69, 0x70,
0x68, 0x2B, 0x64, 0x4A, 0xB3, 0x1F, 0xCC, 0x7D, 0xDC, 0x7C, 0x26, 0xF4, 0x77, 0xF6,
0x5C, 0xF2, 0xAE, 0x5A, 0x44, 0x2D, 0xD3, 0xAB, 0x16, 0x62, 0x04, 0x19, 0xBA, 0xFB,
0x90, 0xFF, 0xE2, 0x30, 0x50, 0x89, 0x6E, 0xCB, 0x56, 0xB2, 0xEB, 0xC0, 0x91, 0x16,
0x92, 0x5E, 0x30, 0x8E, 0xAE, 0xC7, 0x94, 0x5D, 0xFD, 0x35, 0xE1, 0x20, 0xF8, 0xAD,
0x3E, 0xBC, 0x08, 0xBF, 0xC0, 0x36, 0x74, 0x9F, 0xD5, 0xBB, 0x52, 0x08, 0xFD, 0x06,
0x66, 0xF3, 0x7A, 0xB3, 0x04, 0xF4, 0x75, 0x29, 0x5D, 0xE9, 0x5F, 0xAA, 0x10, 0x30,
0xB2, 0x0F, 0x5A, 0x1A, 0xC1, 0x2A, 0xB3, 0xFE, 0xCB, 0x21, 0xAD, 0x80, 0xEC, 0x8F,
0x20, 0x09, 0x1C, 0xDB, 0xC5, 0x58, 0x94, 0xC2, 0x9C, 0xC6, 0xCE, 0x82, 0x65, 0x3E,
0x57, 0x90, 0xBC, 0xA9, 0x8B, 0x06, 0xB4, 0xF0, 0x72, 0xF6, 0x77, 0xDF, 0x98, 0x64,
0xF1, 0xEC, 0xFE, 0x37, 0x2D, 0xBC, 0xAE, 0x8C, 0x08, 0x81, 0x1F, 0xC3, 0xC9, 0x89,
0x1A, 0xC7, 0x42, 0x82, 0x4B, 0x2E, 0xDC, 0x8E, 0x8D, 0x73, 0xCE, 0xB1, 0xCC, 0x01,
0xD9, 0x08, 0x70, 0x87, 0x3C, 0x44, 0x08, 0xEC, 0x49, 0x8F, 0x81, 0x5A, 0xE2, 0x40,
0xFF, 0x77, 0xFC, 0x0D};
Exponent1 = new CryptoPP::byte[0x80]{
0x52, 0xCC, 0x2D, 0xA0, 0x9C, 0x9E, 0x75, 0xE7, 0x28, 0xEE, 0x3D, 0xDE, 0xE3,
0x45, 0xD1, 0x4F, 0x94, 0x1C, 0xCC, 0xC8, 0x87, 0x29, 0x45, 0x3B, 0x8D, 0x6E,
0xAB, 0x6E, 0x2A, 0xA7, 0xC7, 0x15, 0x43, 0xA3, 0x04, 0x8F, 0x90, 0x5F, 0xEB,
0xF3, 0x38, 0x4A, 0x77, 0xFA, 0x36, 0xB7, 0x15, 0x76, 0xB6, 0x01, 0x1A, 0x8E,
0x25, 0x87, 0x82, 0xF1, 0x55, 0xD8, 0xC6, 0x43, 0x2A, 0xC0, 0xE5, 0x98, 0xC9,
0x32, 0xD1, 0x94, 0x6F, 0xD9, 0x01, 0xBA, 0x06, 0x81, 0xE0, 0x6D, 0x88, 0xF2,
0x24, 0x2A, 0x25, 0x01, 0x64, 0x5C, 0xBF, 0xF2, 0xD9, 0x99, 0x67, 0x3E, 0xF6,
0x72, 0xEE, 0xE4, 0xE2, 0x33, 0x5C, 0xF8, 0x00, 0x40, 0xE3, 0x2A, 0x9A, 0xF4,
0x3D, 0x22, 0x86, 0x44, 0x3C, 0xFB, 0x0A, 0xA5, 0x7C, 0x3F, 0xCC, 0xF5, 0xF1,
0x16, 0xC4, 0xAC, 0x88, 0xB4, 0xDE, 0x62, 0x94, 0x92, 0x6A, 0x13};
Exponent2 = new CryptoPP::byte[0x80]{
0x7C, 0x9D, 0xAD, 0x39, 0xE0, 0xD5, 0x60, 0x14, 0x94, 0x48, 0x19, 0x7F, 0x88,
0x95, 0xD5, 0x8B, 0x80, 0xAD, 0x85, 0x8A, 0x4B, 0x77, 0x37, 0x85, 0xD0, 0x77,
0xBB, 0xBF, 0x89, 0x71, 0x4A, 0x72, 0xCB, 0x72, 0x68, 0x38, 0xEC, 0x02, 0xC6,
0x7D, 0xC6, 0x44, 0x06, 0x33, 0x51, 0x1C, 0xC0, 0xFF, 0x95, 0x8F, 0x0D, 0x75,
0xDC, 0x25, 0xBB, 0x0B, 0x73, 0x91, 0xA9, 0x6D, 0x42, 0xD8, 0x03, 0xB7, 0x68,
0xD4, 0x1E, 0x75, 0x62, 0xA3, 0x70, 0x35, 0x79, 0x78, 0x00, 0xC8, 0xF5, 0xEF,
0x15, 0xB9, 0xFC, 0x4E, 0x47, 0x5A, 0xC8, 0x70, 0x70, 0x5B, 0x52, 0x98, 0xC0,
0xC2, 0x58, 0x4A, 0x70, 0x96, 0xCC, 0xB8, 0x10, 0xE1, 0x2F, 0x78, 0x8B, 0x2B,
0xA1, 0x7F, 0xF9, 0xAC, 0xDE, 0xF0, 0xBB, 0x2B, 0xE2, 0x66, 0xE3, 0x22, 0x92,
0x31, 0x21, 0x57, 0x92, 0xC4, 0xB8, 0xF2, 0x3E, 0x76, 0x20, 0x37};
Coefficient = new CryptoPP::byte[0x80]{
0x45, 0x97, 0x55, 0xD4, 0x22, 0x08, 0x5E, 0xF3, 0x5C, 0xB4, 0x05, 0x7A, 0xFD,
0xAA, 0x42, 0x42, 0xAD, 0x9A, 0x8C, 0xA0, 0x6C, 0xBB, 0x1D, 0x68, 0x54, 0x54,
0x6E, 0x3E, 0x32, 0xE3, 0x53, 0x73, 0x76, 0xF1, 0x3E, 0x01, 0xEA, 0xD3, 0xCF,
0xEB, 0xEB, 0x23, 0x3E, 0xC0, 0xBE, 0xCE, 0xEC, 0x2C, 0x89, 0x5F, 0xA8, 0x27,
0x3A, 0x4C, 0xB7, 0xE6, 0x74, 0xBC, 0x45, 0x4C, 0x26, 0xC8, 0x25, 0xFF, 0x34,
0x63, 0x25, 0x37, 0xE1, 0x48, 0x10, 0xC1, 0x93, 0xA6, 0xAF, 0xEB, 0xBA, 0xE3,
0xA2, 0xF1, 0x3D, 0xEF, 0x63, 0xD8, 0xF4, 0xFD, 0xD3, 0xEE, 0xE2, 0x5D, 0xE9,
0x33, 0xCC, 0xAD, 0xBA, 0x75, 0x5C, 0x85, 0xAF, 0xCE, 0xA9, 0x3D, 0xD1, 0xA2,
0x17, 0xF3, 0xF6, 0x98, 0xB3, 0x50, 0x8E, 0x5E, 0xF6, 0xEB, 0x02, 0x8E, 0xA1,
0x62, 0xA7, 0xD6, 0x2C, 0xEC, 0x91, 0xFF, 0x15, 0x40, 0xD2, 0xE3};
Modulus = new CryptoPP::byte[0x100]{
0xd2, 0x12, 0xfc, 0x33, 0x5f, 0x6d, 0xdb, 0x83, 0x16, 0x09, 0x62, 0x8b, 0x03, 0x56,
0x27, 0x37, 0x82, 0xd4, 0x77, 0x85, 0x35, 0x29, 0x39, 0x2d, 0x52, 0x6b, 0x8c, 0x4c,
0x8c, 0xfb, 0x06, 0xc1, 0x84, 0x5b, 0xe7, 0xd4, 0xf7, 0xbc, 0xd2, 0x4e, 0x62, 0x45,
0xcd, 0x2a, 0xbb, 0xd7, 0x77, 0x76, 0x45, 0x36, 0x55, 0x27, 0x3f, 0xb3, 0xf5, 0xf9,
0x8e, 0xda, 0x4b, 0xef, 0xaa, 0x59, 0xae, 0xb3, 0x9b, 0xea, 0x54, 0x98, 0xd2, 0x06,
0x32, 0x6a, 0x58, 0x31, 0x2a, 0xe0, 0xd4, 0x4f, 0x90, 0xb5, 0x0a, 0x7d, 0xec, 0xf4,
0x3a, 0x9c, 0x52, 0x67, 0x2d, 0x99, 0x31, 0x8e, 0x0c, 0x43, 0xe6, 0x82, 0xfe, 0x07,
0x46, 0xe1, 0x2e, 0x50, 0xd4, 0x1f, 0x2d, 0x2f, 0x7e, 0xd9, 0x08, 0xba, 0x06, 0xb3,
0xbf, 0x2e, 0x20, 0x3f, 0x4e, 0x3f, 0xfe, 0x44, 0xff, 0xaa, 0x50, 0x43, 0x57, 0x91,
0x69, 0x94, 0x49, 0x15, 0x82, 0x82, 0xe4, 0x0f, 0x4c, 0x8d, 0x9d, 0x2c, 0xc9, 0x5b,
0x1d, 0x64, 0xbf, 0x88, 0x8b, 0xd4, 0xc5, 0x94, 0xe7, 0x65, 0x47, 0x84, 0x1e, 0xe5,
0x79, 0x10, 0xfb, 0x98, 0x93, 0x47, 0xb9, 0x7d, 0x85, 0x12, 0xa6, 0x40, 0x98, 0x2c,
0xf7, 0x92, 0xbc, 0x95, 0x19, 0x32, 0xed, 0xe8, 0x90, 0x56, 0x0d, 0x65, 0xc1, 0xaa,
0x78, 0xc6, 0x2e, 0x54, 0xfd, 0x5f, 0x54, 0xa1, 0xf6, 0x7e, 0xe5, 0xe0, 0x5f, 0x61,
0xc1, 0x20, 0xb4, 0xb9, 0xb4, 0x33, 0x08, 0x70, 0xe4, 0xdf, 0x89, 0x56, 0xed, 0x01,
0x29, 0x46, 0x77, 0x5f, 0x8c, 0xb8, 0xa9, 0xf5, 0x1e, 0x2e, 0xb3, 0xb9, 0xbf, 0xe0,
0x09, 0xb7, 0x8d, 0x28, 0xd4, 0xa6, 0xc3, 0xb8, 0x1e, 0x1f, 0x07, 0xeb, 0xb4, 0x12,
0x0b, 0x95, 0xb8, 0x85, 0x30, 0xfd, 0xdc, 0x39, 0x13, 0xd0, 0x7c, 0xdc, 0x8f, 0xed,
0xf9, 0xc9, 0xa3, 0xc1};
PublicExponent = new CryptoPP::byte[4]{0, 1, 0, 1};
};
static constexpr CryptoPP::byte Prime2[] = {
0xD7, 0xA1, 0x0F, 0x9A, 0x8B, 0xF2, 0xC9, 0x11, 0x95, 0x32, 0x9A, 0x8C, 0xF0, 0xD9, 0x40,
0x47, 0xF5, 0x68, 0xA0, 0x0D, 0xBD, 0xC1, 0xFC, 0x43, 0x2F, 0x65, 0xF9, 0xC3, 0x61, 0x0F,
0x25, 0x77, 0x54, 0xAD, 0xD7, 0x58, 0xAC, 0x84, 0x40, 0x60, 0x8D, 0x3F, 0xF3, 0x65, 0x89,
0x75, 0xB5, 0xC6, 0x2C, 0x51, 0x1A, 0x2F, 0x1F, 0x22, 0xE4, 0x43, 0x11, 0x54, 0xBE, 0xC9,
0xB4, 0xC7, 0xB5, 0x1B, 0x05, 0x0B, 0xBC, 0x56, 0x9A, 0xCD, 0x4A, 0xD9, 0x73, 0x68, 0x5E,
0x5C, 0xFB, 0x92, 0xB7, 0x8B, 0x0D, 0xFF, 0xF5, 0x07, 0xCA, 0xB4, 0xC8, 0x9B, 0x96, 0x3C,
0x07, 0x9E, 0x3E, 0x6B, 0x2A, 0x11, 0xF2, 0x8A, 0xB1, 0x8A, 0xD7, 0x2E, 0x1B, 0xA5, 0x53,
0x24, 0x06, 0xED, 0x50, 0xB8, 0x90, 0x67, 0xB1, 0xE2, 0x41, 0xC6, 0x92, 0x01, 0xEE, 0x10,
0xF0, 0x61, 0xBB, 0xFB, 0xB2, 0x7D, 0x4A, 0x73};
static constexpr CryptoPP::byte PrivateExponent[] = {
0x32, 0xD9, 0x03, 0x90, 0x8F, 0xBD, 0xB0, 0x8F, 0x57, 0x2B, 0x28, 0x5E, 0x0B, 0x8D, 0xB3,
0xEA, 0x5C, 0xD1, 0x7E, 0xA8, 0x90, 0x88, 0x8C, 0xDD, 0x6A, 0x80, 0xBB, 0xB1, 0xDF, 0xC1,
0xF7, 0x0D, 0xAA, 0x32, 0xF0, 0xB7, 0x7C, 0xCB, 0x88, 0x80, 0x0E, 0x8B, 0x64, 0xB0, 0xBE,
0x4C, 0xD6, 0x0E, 0x9B, 0x8C, 0x1E, 0x2A, 0x64, 0xE1, 0xF3, 0x5C, 0xD7, 0x76, 0x01, 0x41,
0x5E, 0x93, 0x5C, 0x94, 0xFE, 0xDD, 0x46, 0x62, 0xC3, 0x1B, 0x5A, 0xE2, 0xA0, 0xBC, 0x2D,
0xEB, 0xC3, 0x98, 0x0A, 0xA7, 0xB7, 0x85, 0x69, 0x70, 0x68, 0x2B, 0x64, 0x4A, 0xB3, 0x1F,
0xCC, 0x7D, 0xDC, 0x7C, 0x26, 0xF4, 0x77, 0xF6, 0x5C, 0xF2, 0xAE, 0x5A, 0x44, 0x2D, 0xD3,
0xAB, 0x16, 0x62, 0x04, 0x19, 0xBA, 0xFB, 0x90, 0xFF, 0xE2, 0x30, 0x50, 0x89, 0x6E, 0xCB,
0x56, 0xB2, 0xEB, 0xC0, 0x91, 0x16, 0x92, 0x5E, 0x30, 0x8E, 0xAE, 0xC7, 0x94, 0x5D, 0xFD,
0x35, 0xE1, 0x20, 0xF8, 0xAD, 0x3E, 0xBC, 0x08, 0xBF, 0xC0, 0x36, 0x74, 0x9F, 0xD5, 0xBB,
0x52, 0x08, 0xFD, 0x06, 0x66, 0xF3, 0x7A, 0xB3, 0x04, 0xF4, 0x75, 0x29, 0x5D, 0xE9, 0x5F,
0xAA, 0x10, 0x30, 0xB2, 0x0F, 0x5A, 0x1A, 0xC1, 0x2A, 0xB3, 0xFE, 0xCB, 0x21, 0xAD, 0x80,
0xEC, 0x8F, 0x20, 0x09, 0x1C, 0xDB, 0xC5, 0x58, 0x94, 0xC2, 0x9C, 0xC6, 0xCE, 0x82, 0x65,
0x3E, 0x57, 0x90, 0xBC, 0xA9, 0x8B, 0x06, 0xB4, 0xF0, 0x72, 0xF6, 0x77, 0xDF, 0x98, 0x64,
0xF1, 0xEC, 0xFE, 0x37, 0x2D, 0xBC, 0xAE, 0x8C, 0x08, 0x81, 0x1F, 0xC3, 0xC9, 0x89, 0x1A,
0xC7, 0x42, 0x82, 0x4B, 0x2E, 0xDC, 0x8E, 0x8D, 0x73, 0xCE, 0xB1, 0xCC, 0x01, 0xD9, 0x08,
0x70, 0x87, 0x3C, 0x44, 0x08, 0xEC, 0x49, 0x8F, 0x81, 0x5A, 0xE2, 0x40, 0xFF, 0x77, 0xFC,
0x0D};
};

View File

@ -279,8 +279,8 @@ bool PKG::Extract(const std::filesystem::path& filepath, const std::filesystem::
}
}
// let's deal with the root/uroot enteries here.
// Sometimes it's more than 2 enteries (Tomb Raider Remastered)
// let's deal with the root/uroot entries here.
// Sometimes it's more than 2 entries (Tomb Raider Remastered)
const std::string_view flat_path_table(&decompressedData[0x10], 15);
if (flat_path_table == "flat_path_table") {
uroot_reached = true;

View File

@ -48,7 +48,7 @@ std::filesystem::path MntPoints::GetHostPath(std::string_view guest_directory) {
pos = mount->mount.size() + 1;
const auto rel_path = std::string_view(corrected_path).substr(pos);
const auto host_path = mount->host_path / rel_path;
if (!NeedsCaseInsensiveSearch) {
if (!NeedsCaseInsensitiveSearch) {
return host_path;
}

View File

@ -14,9 +14,9 @@ namespace Core::FileSys {
class MntPoints {
#ifdef _WIN64
static constexpr bool NeedsCaseInsensiveSearch = false;
static constexpr bool NeedsCaseInsensitiveSearch = false;
#else
static constexpr bool NeedsCaseInsensiveSearch = true;
static constexpr bool NeedsCaseInsensitiveSearch = true;
#endif
public:
struct MntPair {

View File

@ -1,9 +1,10 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
// Generated By moduleGenerator
#include "ajm.h"
#include "ajm_error.h"
#include "common/logging/log.h"
#include "core/libraries/ajm/ajm.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"

View File

@ -0,0 +1,28 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
constexpr int ORBIS_AJM_ERROR_UNKNOWN = 0x80930001;
constexpr int ORBIS_AJM_ERROR_INVALID_CONTEXT = 0x80930002;
constexpr int ORBIS_AJM_ERROR_INVALID_INSTANCE = 0x80930003;
constexpr int ORBIS_AJM_ERROR_INVALID_BATCH = 0x80930004;
constexpr int ORBIS_AJM_ERROR_INVALID_PARAMETER = 0x80930005;
constexpr int ORBIS_AJM_ERROR_OUT_OF_MEMORY = 0x80930006;
constexpr int ORBIS_AJM_ERROR_OUT_OF_RESOURCES = 0x80930007;
constexpr int ORBIS_AJM_ERROR_CODEC_NOT_SUPPORTED = 0x80930008;
constexpr int ORBIS_AJM_ERROR_CODEC_ALREADY_REGISTERED = 0x80930009;
constexpr int ORBIS_AJM_ERROR_CODEC_NOT_REGISTERED = 0x8093000A;
constexpr int ORBIS_AJM_ERROR_WRONG_REVISION_FLAG = 0x8093000B;
constexpr int ORBIS_AJM_ERROR_FLAG_NOT_SUPPORTED = 0x8093000C;
constexpr int ORBIS_AJM_ERROR_BUSY = 0x8093000D;
constexpr int ORBIS_AJM_ERROR_BAD_PRIORITY = 0x8093000E;
constexpr int ORBIS_AJM_ERROR_IN_PROGRESS = 0x8093000F;
constexpr int ORBIS_AJM_ERROR_RETRY = 0x80930010;
constexpr int ORBIS_AJM_ERROR_MALFORMED_BATCH = 0x80930011;
constexpr int ORBIS_AJM_ERROR_JOB_CREATION = 0x80930012;
constexpr int ORBIS_AJM_ERROR_INVALID_OPCODE = 0x80930013;
constexpr int ORBIS_AJM_ERROR_PRIORITY_VIOLATION = 0x80930014;
constexpr int ORBIS_AJM_ERROR_BUFFER_TOO_BIG = 0x80930015;
constexpr int ORBIS_AJM_ERROR_INVALID_ADDRESS = 0x80930016;
constexpr int ORBIS_AJM_ERROR_CANCELLED = 0x80930017;

View File

@ -221,12 +221,12 @@ int PS4_SYSV_ABI Func_C59A36FF8D7C59DA() {
return ORBIS_OK;
}
int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlemetId() {
int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlementId() {
LOG_ERROR(Lib_AppContent, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlemetId() {
int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlementId() {
LOG_ERROR(Lib_AppContent, "(STUBBED) called");
return ORBIS_OK;
}
@ -313,9 +313,9 @@ void RegisterlibSceAppContent(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("xZo2-418Wdo", "libSceAppContentBundle", 1, "libSceAppContent", 1, 1,
Func_C59A36FF8D7C59DA);
LIB_FUNCTION("kJmjt81mXKQ", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,
sceAppContentAddcontEnqueueDownloadByEntitlemetId);
sceAppContentAddcontEnqueueDownloadByEntitlementId);
LIB_FUNCTION("efX3lrPwdKA", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,
sceAppContentAddcontMountByEntitlemetId);
sceAppContentAddcontMountByEntitlementId);
LIB_FUNCTION("z9hgjLd1SGA", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,
sceAppContentGetAddcontInfoByEntitlementId);
LIB_FUNCTION("3wUaDTGmjcQ", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,

View File

@ -92,8 +92,8 @@ int PS4_SYSV_ABI sceAppContentTemporaryDataMount2(OrbisAppContentTemporaryDataOp
int PS4_SYSV_ABI sceAppContentTemporaryDataUnmount();
int PS4_SYSV_ABI sceAppContentGetPftFlag();
int PS4_SYSV_ABI Func_C59A36FF8D7C59DA();
int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlemetId();
int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlemetId();
int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlementId();
int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlementId();
int PS4_SYSV_ABI sceAppContentGetAddcontInfoByEntitlementId();
int PS4_SYSV_ABI sceAppContentGetAddcontInfoListByIroTag();
int PS4_SYSV_ABI sceAppContentGetDownloadedStoreCountry();

View File

@ -7,6 +7,8 @@
#include "common/types.h"
#include <string_view>
struct AVIOContext;
namespace Libraries::AvPlayer {
@ -14,6 +16,7 @@ namespace Libraries::AvPlayer {
class IDataStreamer {
public:
virtual ~IDataStreamer() = default;
virtual bool Init(std::string_view path) = 0;
virtual AVIOContext* GetContext() = 0;
};

View File

@ -18,19 +18,8 @@ extern "C" {
namespace Libraries::AvPlayer {
AvPlayerFileStreamer::AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement,
std::string_view path)
: m_file_replacement(file_replacement) {
const auto ptr = m_file_replacement.object_ptr;
m_fd = m_file_replacement.open(ptr, path.data());
ASSERT(m_fd >= 0);
m_file_size = m_file_replacement.size(ptr);
// avio_buffer is deallocated in `avio_context_free`
const auto avio_buffer = reinterpret_cast<u8*>(av_malloc(AVPLAYER_AVIO_BUFFER_SIZE));
m_avio_context =
avio_alloc_context(avio_buffer, AVPLAYER_AVIO_BUFFER_SIZE, 0, this,
&AvPlayerFileStreamer::ReadPacket, nullptr, &AvPlayerFileStreamer::Seek);
}
AvPlayerFileStreamer::AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement)
: m_file_replacement(file_replacement) {}
AvPlayerFileStreamer::~AvPlayerFileStreamer() {
if (m_avio_context != nullptr) {
@ -43,6 +32,21 @@ AvPlayerFileStreamer::~AvPlayerFileStreamer() {
}
}
bool AvPlayerFileStreamer::Init(std::string_view path) {
const auto ptr = m_file_replacement.object_ptr;
m_fd = m_file_replacement.open(ptr, path.data());
if (m_fd < 0) {
return false;
}
m_file_size = m_file_replacement.size(ptr);
// avio_buffer is deallocated in `avio_context_free`
const auto avio_buffer = reinterpret_cast<u8*>(av_malloc(AVPLAYER_AVIO_BUFFER_SIZE));
m_avio_context =
avio_alloc_context(avio_buffer, AVPLAYER_AVIO_BUFFER_SIZE, 0, this,
&AvPlayerFileStreamer::ReadPacket, nullptr, &AvPlayerFileStreamer::Seek);
return true;
}
s32 AvPlayerFileStreamer::ReadPacket(void* opaque, u8* buffer, s32 size) {
const auto self = reinterpret_cast<AvPlayerFileStreamer*>(opaque);
if (self->m_position >= self->m_file_size) {

View File

@ -15,9 +15,11 @@ namespace Libraries::AvPlayer {
class AvPlayerFileStreamer : public IDataStreamer {
public:
AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement, std::string_view path);
AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement);
~AvPlayerFileStreamer();
bool Init(std::string_view path) override;
AVIOContext* GetContext() override {
return m_avio_context;
}

View File

@ -110,7 +110,7 @@ s32 AvPlayer::AddSource(std::string_view path) {
if (path.empty()) {
return ORBIS_AVPLAYER_ERROR_INVALID_PARAMS;
}
if (AVPLAYER_IS_ERROR(m_state->AddSource(path, GetSourceType(path)))) {
if (!m_state->AddSource(path, GetSourceType(path))) {
return ORBIS_AVPLAYER_ERROR_OPERATION_FAILED;
}
return ORBIS_OK;
@ -128,7 +128,7 @@ s32 AvPlayer::GetStreamCount() {
}
s32 AvPlayer::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
if (AVPLAYER_IS_ERROR(m_state->GetStreamInfo(stream_index, info))) {
if (!m_state->GetStreamInfo(stream_index, info)) {
return ORBIS_AVPLAYER_ERROR_OPERATION_FAILED;
}
return ORBIS_OK;
@ -145,7 +145,10 @@ s32 AvPlayer::EnableStream(u32 stream_index) {
}
s32 AvPlayer::Start() {
return m_state->Start();
if (!m_state->Start()) {
return ORBIS_AVPLAYER_ERROR_OPERATION_FAILED;
}
return ORBIS_OK;
}
bool AvPlayer::GetVideoData(SceAvPlayerFrameInfo& video_info) {

View File

@ -24,31 +24,39 @@ namespace Libraries::AvPlayer {
using namespace Kernel;
AvPlayerSource::AvPlayerSource(AvPlayerStateCallback& state, std::string_view path,
const SceAvPlayerInitData& init_data,
SceAvPlayerSourceType source_type)
: m_state(state), m_memory_replacement(init_data.memory_replacement),
m_num_output_video_framebuffers(
std::min(std::max(2, init_data.num_output_video_framebuffers), 16)) {
AVFormatContext* context = avformat_alloc_context();
if (init_data.file_replacement.open != nullptr) {
m_up_data_streamer =
std::make_unique<AvPlayerFileStreamer>(init_data.file_replacement, path);
context->pb = m_up_data_streamer->GetContext();
ASSERT(!AVPLAYER_IS_ERROR(avformat_open_input(&context, nullptr, nullptr, nullptr)));
} else {
const auto mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
const auto filepath = mnt->GetHostPath(path);
ASSERT(!AVPLAYER_IS_ERROR(
avformat_open_input(&context, filepath.string().c_str(), nullptr, nullptr)));
}
m_avformat_context = AVFormatContextPtr(context, &ReleaseAVFormatContext);
}
AvPlayerSource::AvPlayerSource(AvPlayerStateCallback& state) : m_state(state) {}
AvPlayerSource::~AvPlayerSource() {
Stop();
}
bool AvPlayerSource::Init(const SceAvPlayerInitData& init_data, std::string_view path) {
m_memory_replacement = init_data.memory_replacement,
m_num_output_video_framebuffers =
std::min(std::max(2, init_data.num_output_video_framebuffers), 16);
AVFormatContext* context = avformat_alloc_context();
if (init_data.file_replacement.open != nullptr) {
m_up_data_streamer = std::make_unique<AvPlayerFileStreamer>(init_data.file_replacement);
if (!m_up_data_streamer->Init(path)) {
return false;
}
context->pb = m_up_data_streamer->GetContext();
if (AVPLAYER_IS_ERROR(avformat_open_input(&context, nullptr, nullptr, nullptr))) {
return false;
}
} else {
const auto mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
const auto filepath = mnt->GetHostPath(path);
if (AVPLAYER_IS_ERROR(
avformat_open_input(&context, filepath.string().c_str(), nullptr, nullptr))) {
return false;
}
}
m_avformat_context = AVFormatContextPtr(context, &ReleaseAVFormatContext);
return true;
}
bool AvPlayerSource::FindStreamInfo() {
if (m_avformat_context == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not find stream info. NULL context.");
@ -87,16 +95,16 @@ static f32 AVRationalToF32(const AVRational rational) {
return f32(rational.num) / rational.den;
}
s32 AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
bool AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
info = {};
if (m_avformat_context == nullptr || stream_index >= m_avformat_context->nb_streams) {
LOG_ERROR(Lib_AvPlayer, "Could not get stream {} info.", stream_index);
return -1;
return false;
}
const auto p_stream = m_avformat_context->streams[stream_index];
if (p_stream == nullptr || p_stream->codecpar == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not get stream {} info. NULL stream.", stream_index);
return -1;
return false;
}
info.type = CodecTypeToStreamType(p_stream->codecpar->codec_type);
info.start_time = p_stream->start_time;
@ -140,9 +148,9 @@ s32 AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info)
break;
default:
LOG_ERROR(Lib_AvPlayer, "Stream {} type is unknown: {}.", stream_index, info.type);
return -1;
return false;
}
return 0;
return true;
}
bool AvPlayerSource::EnableStream(u32 stream_index) {
@ -215,12 +223,12 @@ std::optional<bool> AvPlayerSource::HasFrames(u32 num_frames) {
return m_video_packets.Size() > num_frames || m_is_eof;
}
s32 AvPlayerSource::Start() {
bool AvPlayerSource::Start() {
std::unique_lock lock(m_state_mutex);
if (m_audio_codec_context == nullptr && m_video_codec_context == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not start playback. NULL context.");
return -1;
return false;
}
m_demuxer_thread = std::jthread([this](std::stop_token stop) { this->DemuxerThread(stop); });
m_video_decoder_thread =
@ -228,7 +236,7 @@ s32 AvPlayerSource::Start() {
m_audio_decoder_thread =
std::jthread([this](std::stop_token stop) { this->AudioDecoderThread(stop); });
m_start_time = std::chrono::high_resolution_clock::now();
return 0;
return true;
}
bool AvPlayerSource::Stop() {

View File

@ -120,17 +120,17 @@ private:
class AvPlayerSource {
public:
AvPlayerSource(AvPlayerStateCallback& state, std::string_view path,
const SceAvPlayerInitData& init_data, SceAvPlayerSourceType source_type);
AvPlayerSource(AvPlayerStateCallback& state);
~AvPlayerSource();
bool Init(const SceAvPlayerInitData& init_data, std::string_view path);
bool FindStreamInfo();
s32 GetStreamCount();
s32 GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
bool GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
bool EnableStream(u32 stream_index);
void SetLooping(bool is_looping);
std::optional<bool> HasFrames(u32 num_frames);
s32 Start();
bool Start();
bool Stop();
bool GetAudioData(SceAvPlayerFrameInfo& audio_info);
bool GetVideoData(SceAvPlayerFrameInfo& video_info);

View File

@ -24,6 +24,7 @@ void PS4_SYSV_ABI AvPlayerState::AutoPlayEventCallback(void* opaque, s32 event_i
s32 timedtext_stream_index = -1;
const s32 stream_count = self->GetStreamCount();
if (AVPLAYER_IS_ERROR(stream_count)) {
self->Stop();
return;
}
if (stream_count == 0) {
@ -32,7 +33,10 @@ void PS4_SYSV_ABI AvPlayerState::AutoPlayEventCallback(void* opaque, s32 event_i
}
for (u32 stream_index = 0; stream_index < stream_count; ++stream_index) {
SceAvPlayerStreamInfo info{};
self->GetStreamInfo(stream_index, info);
if (!self->GetStreamInfo(stream_index, info)) {
self->Stop();
return;
}
const std::string_view default_language(
reinterpret_cast<char*>(self->m_default_language));
@ -116,23 +120,28 @@ AvPlayerState::~AvPlayerState() {
}
// Called inside GAME thread
s32 AvPlayerState::AddSource(std::string_view path, SceAvPlayerSourceType source_type) {
bool AvPlayerState::AddSource(std::string_view path, SceAvPlayerSourceType source_type) {
if (path.empty()) {
LOG_ERROR(Lib_AvPlayer, "File path is empty.");
return -1;
return false;
}
{
std::unique_lock lock(m_source_mutex);
if (m_up_source != nullptr) {
LOG_ERROR(Lib_AvPlayer, "Only one source is supported.");
return -1;
return false;
}
m_up_source = std::make_unique<AvPlayerSource>(*this, path, m_init_data, source_type);
m_up_source = std::make_unique<AvPlayerSource>(*this);
if (!m_up_source->Init(m_init_data, path)) {
SetState(AvState::Error);
m_up_source.reset();
return false;
}
}
AddSourceEvent();
return 0;
return true;
}
// Called inside GAME thread
@ -146,25 +155,25 @@ s32 AvPlayerState::GetStreamCount() {
}
// Called inside GAME thread
s32 AvPlayerState::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
bool AvPlayerState::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
std::shared_lock lock(m_source_mutex);
if (m_up_source == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not get stream {} info. No source.", stream_index);
return -1;
return false;
}
return m_up_source->GetStreamInfo(stream_index, info);
}
// Called inside GAME thread
s32 AvPlayerState::Start() {
bool AvPlayerState::Start() {
std::shared_lock lock(m_source_mutex);
if (m_up_source == nullptr || m_up_source->Start() < 0) {
if (m_up_source == nullptr || !m_up_source->Start()) {
LOG_ERROR(Lib_AvPlayer, "Could not start playback.");
return -1;
return false;
}
SetState(AvState::Play);
OnPlaybackStateChanged(AvState::Play);
return 0;
return true;
}
void AvPlayerState::AvControllerThread(std::stop_token stop) {
@ -219,10 +228,10 @@ bool AvPlayerState::Stop() {
if (m_up_source == nullptr || m_current_state == AvState::Stop) {
return false;
}
if (!SetState(AvState::Stop)) {
if (!m_up_source->Stop()) {
return false;
}
if (!m_up_source->Stop()) {
if (!SetState(AvState::Stop)) {
return false;
}
OnPlaybackStateChanged(AvState::Stop);

View File

@ -24,11 +24,11 @@ public:
AvPlayerState(const SceAvPlayerInitData& init_data);
~AvPlayerState();
s32 AddSource(std::string_view filename, SceAvPlayerSourceType source_type);
bool AddSource(std::string_view filename, SceAvPlayerSourceType source_type);
s32 GetStreamCount();
s32 GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
bool GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
bool EnableStream(u32 stream_index);
s32 Start();
bool Start();
bool Stop();
bool GetAudioData(SceAvPlayerFrameInfo& audio_info);
bool GetVideoData(SceAvPlayerFrameInfo& video_info);

View File

@ -233,9 +233,6 @@ constexpr int SCE_KERNEL_ERROR_ESDKVERSION = 0x80020063;
constexpr int SCE_KERNEL_ERROR_ESTART = 0x80020064;
constexpr int SCE_KERNEL_ERROR_ESTOP = 0x80020065;
// libSceRandom error codes
constexpr int SCE_RANDOM_ERROR_INVALID = 0x817C0016;
// videoOut
constexpr int SCE_VIDEO_OUT_ERROR_INVALID_VALUE = 0x80290001; // invalid argument
constexpr int SCE_VIDEO_OUT_ERROR_INVALID_ADDRESS = 0x80290002; // invalid addresses
@ -249,14 +246,6 @@ constexpr int SCE_VIDEO_OUT_ERROR_SLOT_OCCUPIED = 0x80290010; // slot alr
constexpr int SCE_VIDEO_OUT_ERROR_FLIP_QUEUE_FULL = 0x80290012; // flip queue is full
constexpr int SCE_VIDEO_OUT_ERROR_INVALID_OPTION = 0x8029001A; // Invalid buffer attribute option
// GnmDriver
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_PIPE_ID = 0x80D17000;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_QUEUE_ID = 0x80D17001;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_BASE_ADDR = 0x80D17003;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_SIZE = 0x80D17002;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_READ_PTR_ADDR = 0x80D17004;
constexpr int ORBIS_GNM_ERROR_FAILURE = 0x8EEE00FF;
// Generic
constexpr int ORBIS_OK = 0x00000000;
constexpr int ORBIS_FAIL = 0xFFFFFFFF;

View File

@ -0,0 +1,85 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
constexpr int ORBIS_GNM_ERROR_SUBMISSION_FAILED_INVALID_ARGUMENT = 0x80D11000;
constexpr int ORBIS_GNM_ERROR_SUBMISSION_NOT_ENOUGH_RESOURCES = 0x80D11001;
constexpr int ORBIS_GNM_ERROR_SUBMISSION_AND_FLIP_FAILED_INVALID_COMMAND_BUFFER = 0x80D11080;
constexpr int ORBIS_GNM_ERROR_SUBMISSION_AND_FLIP_FAILED_INVALID_QUEUE_FULL = 0x80D11081;
constexpr int ORBIS_GNM_ERROR_SUBMISSION_AND_FLIP_FAILED_REQUEST_FAILED = 0x80D11082;
constexpr int ORBIS_GNM_ERROR_SUBMISSION_FAILED_INTERNAL_ERROR = 0x80D110FF;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING = 0x80D12000;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_RWBUFFER_ROTYPE = 0x80D12001;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_BLENDING = 0x80D12002;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_DRAW_CU_MASK = 0x80D12003;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_MRT_SETUP = 0x80D12004;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_DEPTH_RT_SETUP = 0x80D12005;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_PS_AND_MRT_FORMAT = 0x80D1200F;
constexpr int ORBIS_GNM_ERROR_VALIDATION_ERROR = 0x80D13000;
constexpr int ORBIS_GNM_ERROR_VALIDATION_VSHARP = 0x80D13001;
constexpr int ORBIS_GNM_ERROR_VALIDATION_TSHARP = 0x80D13002;
constexpr int ORBIS_GNM_ERROR_VALIDATION_RESOURCE = 0x80D13003;
constexpr int ORBIS_GNM_ERROR_VALIDATION_TABLE_MEMORY = 0x80D13004;
constexpr int ORBIS_GNM_ERROR_VALIDATION_WRITE_EVENT_OP = 0x80D13005;
constexpr int ORBIS_GNM_ERROR_VALIDATION_INDEX_BUFFER = 0x80D13006;
constexpr int ORBIS_GNM_ERROR_VALIDATION_TESS_FACTOR_BUFFER = 0x80D13007;
constexpr int ORBIS_GNM_ERROR_VALIDATION_SCRATCH_RING = 0x80D13008;
constexpr int ORBIS_GNM_ERROR_VALIDATION_PRIMITIVE_TYPE = 0x80D13009;
constexpr int ORBIS_GNM_ERROR_VALIDATION_INDEX_SIZE = 0x80D1300A;
constexpr int ORBIS_GNM_ERROR_VALIDATION_INLINE_DRAW_SIZE = 0x80D1300B;
constexpr int ORBIS_GNM_ERROR_VALIDATION_NUM_INPUT_PATCHES = 0x80D1300C;
constexpr int ORBIS_GNM_ERROR_VALIDATION_GS_MODE = 0x80D1300D;
constexpr int ORBIS_GNM_ERROR_VALIDATION_SHADER_ADDRESS = 0x80D1300E;
constexpr int ORBIS_GNM_ERROR_VALIDATION_BORDER_COLOR_TABLE = 0x80D1300F;
constexpr int ORBIS_GNM_ERROR_VALIDATION_SSHARP = 0x80D13010;
constexpr int ORBIS_GNM_ERROR_VALIDATION_DISPATCH_DRAW = 0x80D13011;
constexpr int ORBIS_GNM_ERROR_VALIDATION_ACTIVE_SHADER_STAGE = 0x80D13012;
constexpr int ORBIS_GNM_ERROR_VALIDATION_DCB = 0x80D13013;
constexpr int ORBIS_GNM_ERROR_VALIDATION_MISMATCH_SHADER_STAGE = 0x80D13014;
constexpr int ORBIS_GNM_ERROR_VALIDATION_MRT_SETUP = 0x80D13015;
constexpr int ORBIS_GNM_ERROR_VALIDATION_BAD_OP_CODE = 0x80D13016;
constexpr int ORBIS_GNM_ERROR_VALIDATION_DEPTH_RT_SETUP = 0x80D13017;
constexpr int ORBIS_GNM_ERROR_VALIDATION_NUM_INSTANCES = 0x80D13018;
constexpr int ORBIS_GNM_ERROR_VALIDATION_SRT = 0x80D13019;
constexpr int ORBIS_GNM_ERROR_VALIDATION_INVALID_ARGUMENT = 0x80D13FFD;
constexpr int ORBIS_GNM_ERROR_VALIDATION_FAILED_INTERNAL_ERROR = 0x80D13FFE;
constexpr int ORBIS_GNM_ERROR_VALIDATION_NOT_ENABLED = 0x80D13FFF;
constexpr int ORBIS_GNM_ERROR_CAPTURE_FILE_IO = 0x80D15000;
constexpr int ORBIS_GNM_ERROR_CAPTURE_RAZOR_NOT_LOADED = 0x80D15001;
constexpr int ORBIS_GNM_ERROR_CAPTURE_NOTHING_TO_CAPTURE = 0x80D15002;
constexpr int ORBIS_GNM_ERROR_CAPTURE_FAILED_INTERNAL = 0x80D1500F;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_PIPE_ID = 0x80D17000;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_QUEUE_ID = 0x80D17001;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_SIZE = 0x80D17002;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_BASE_ADDR = 0x80D17003;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_READ_PTR_ADDR = 0x80D17004;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_PIPE_PRIORITY = 0x80D17005;
constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INTERNAL = 0x80D170FF;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_ARGUMENT = 0x80D19000;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_SHADER = 0x80D19001;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_STALE_HANDLE = 0x80D19002;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_FULL = 0x80D19003;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_NOT_PERMITTED = 0x80D19004;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_OUTPUT_ARGUMENT_IS_NULL = 0x80D19005;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_OWNER_HANDLE_INVALID = 0x80D19006;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_HANDLE_INVALID = 0x80D19007;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_TYPE_INVALID = 0x80D19008;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_GDS_RESOURCE_TYPE_INVALID = 0x80D19009;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_SIZE_INVALID = 0x80D1900A;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_ADDRESS_IS_NULL = 0x80D1900B;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_GDS_OFFSET_INVALID = 0x80D1900C;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_NAME_IS_NULL = 0x80D1900D;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_OWNER_NAME_IS_NULL = 0x80D1900E;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_FIND_CALLBACK_IS_NULL = 0x80D1900F;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_IS_NOT_SHADER = 0x80D19010;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_USER_MEMORY_PARAM_IS_NULL = 0x80D19011;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_USER_MEMORY_PARAM_NOT_ALIGNED = 0x80D19012;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_NAME_LENGTH_PARAM = 0x80D19013;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_SIZE_PARAM = 0x80D19014;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_NUM_RESOURCES_PARAM = 0x80D19015;
constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INTERNAL = 0x80D19FFF;
constexpr int ORBIS_GNM_ERROR_GET_GPU_INFO_PARAMETER_NULL = 0x80D1B000;
constexpr int ORBIS_GNM_ERROR_GET_GPU_INFO_FAILED = 0x80D1B001;
constexpr int ORBIS_GNM_ERROR_GET_GPU_INFO_PARAMETER_INVALID = 0x80D1B002;
constexpr int ORBIS_GNM_ERROR_FAILURE = 0x8EEE00FF;

View File

@ -1,6 +1,9 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "gnm_error.h"
#include "gnmdriver.h"
#include "common/assert.h"
#include "common/config.h"
#include "common/debug.h"
@ -9,7 +12,6 @@
#include "common/slot_vector.h"
#include "core/address_space.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/gnmdriver/gnmdriver.h"
#include "core/libraries/kernel/libkernel.h"
#include "core/libraries/libs.h"
#include "core/libraries/videoout/video_out.h"
@ -55,6 +57,10 @@ static constexpr auto HwInitPacketSize = 0x100u;
// clang-format off
static constexpr std::array InitSequence{
// A fake preamble to mimic context reset sent by FW
0xc0001200u, 0u, // IT_CLEAR_STATE
// Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@ -94,9 +100,13 @@ static constexpr std::array InitSequence{
0xc0036900u, 0x295u, 0x100u, 0x100u, 4u,
0xc0017900u, 0x200u, 0xe0000000u,
};
static_assert(InitSequence.size() == 0x73);
static_assert(InitSequence.size() == 0x73 + 2);
static constexpr std::array InitSequence175{
// A fake preamble to mimic context reset sent by FW
0xc0001200u, 0u, // IT_CLEAR_STATE
// Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@ -136,9 +146,13 @@ static constexpr std::array InitSequence175{
0xc0036900u, 0x295u, 0x100u, 0x100u, 4u,
0xc0017900u, 0x200u, 0xe0000000u,
};
static_assert(InitSequence175.size() == 0x73);
static_assert(InitSequence175.size() == 0x73 + 2);
static constexpr std::array InitSequence200{
// A fake preamble to mimic context reset sent by FW
0xc0001200u, 0u, // IT_CLEAR_STATE
// Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@ -179,9 +193,13 @@ static constexpr std::array InitSequence200{
0xc0036900u, 0x295u, 0x100u, 0x100u, 4u,
0xc0017900u, 0x200u, 0xe0000000u,
};
static_assert(InitSequence200.size() == 0x76);
static_assert(InitSequence200.size() == 0x76 + 2);
static constexpr std::array InitSequence350{
// A fake preamble to mimic context reset sent by FW
0xc0001200u, 0u, // IT_CLEAR_STATE
// Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@ -224,7 +242,7 @@ static constexpr std::array InitSequence350{
0xc0017900u, 0x200u, 0xe0000000u,
0xc0016900u, 0x2aau, 0xffu,
};
static_assert(InitSequence350.size() == 0x7c);
static_assert(InitSequence350.size() == 0x7c + 2);
static constexpr std::array CtxInitSequence{
0xc0012800u, 0x80000000u, 0x80000000u,
@ -735,11 +753,11 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState(u32* cmdbuf, u32 size) {
cmdbuf = ClearContextState(cmdbuf);
}
std::memcpy(cmdbuf, InitSequence.data(), InitSequence.size() * 4);
cmdbuf += InitSequence.size();
std::memcpy(cmdbuf, &InitSequence[2], (InitSequence.size() - 2) * 4);
cmdbuf += InitSequence.size() - 2;
const auto cmdbuf_left =
HwInitPacketSize - InitSequence.size() - (clear_state ? 0xc : 0) - 1;
HwInitPacketSize - (InitSequence.size() - 2) - (clear_state ? 0xc : 0) - 1;
cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, cmdbuf_left);
cmdbuf = WriteBody(cmdbuf, 0u);
@ -757,10 +775,10 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState175(u32* cmdbuf, u32 size) {
}
cmdbuf = ClearContextState(cmdbuf);
std::memcpy(cmdbuf, InitSequence175.data(), InitSequence175.size() * 4);
cmdbuf += InitSequence175.size();
std::memcpy(cmdbuf, &InitSequence175[2], (InitSequence175.size() - 2) * 4);
cmdbuf += InitSequence175.size() - 2;
constexpr auto cmdbuf_left = HwInitPacketSize - InitSequence175.size() - 0xc - 1;
constexpr auto cmdbuf_left = HwInitPacketSize - (InitSequence175.size() - 2) - 0xc - 1;
WriteTrailingNop<cmdbuf_left>(cmdbuf);
return HwInitPacketSize;
@ -778,11 +796,11 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState200(u32* cmdbuf, u32 size) {
cmdbuf = ClearContextState(cmdbuf);
}
std::memcpy(cmdbuf, InitSequence200.data(), InitSequence200.size() * 4);
cmdbuf += InitSequence200.size();
std::memcpy(cmdbuf, &InitSequence200[2], (InitSequence200.size() - 2) * 4);
cmdbuf += InitSequence200.size() - 2;
const auto cmdbuf_left =
HwInitPacketSize - InitSequence200.size() - (clear_state ? 0xc : 0) - 1;
HwInitPacketSize - (InitSequence200.size() - 2) - (clear_state ? 0xc : 0) - 1;
cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, cmdbuf_left);
cmdbuf = WriteBody(cmdbuf, 0u);
@ -804,11 +822,11 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState350(u32* cmdbuf, u32 size) {
cmdbuf = ClearContextState(cmdbuf);
}
std::memcpy(cmdbuf, InitSequence350.data(), InitSequence350.size() * 4);
cmdbuf += InitSequence350.size();
std::memcpy(cmdbuf, &InitSequence350[2], (InitSequence350.size() - 2) * 4);
cmdbuf += InitSequence350.size() - 2;
const auto cmdbuf_left =
HwInitPacketSize - InitSequence350.size() - (clear_state ? 0xc : 0) - 1;
HwInitPacketSize - (InitSequence350.size() - 2) - (clear_state ? 0xc : 0) - 1;
cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, cmdbuf_left);
cmdbuf = WriteBody(cmdbuf, 0u);
@ -1743,7 +1761,7 @@ s32 PS4_SYSV_ABI sceGnmSetVsShader(u32* cmdbuf, u32 size, const u32* vs_regs, u3
return -1;
}
const u32 var = shader_modifier == 0 ? vs_regs[2] : (vs_regs[2] & 0xfcfffc3f | shader_modifier);
const u32 var = shader_modifier == 0 ? vs_regs[2] : (vs_regs[2] & 0xfcfffc3f) | shader_modifier;
cmdbuf = PM4CmdSetData::SetShReg(cmdbuf, 0x48u, vs_regs[0], 0u); // SPI_SHADER_PGM_LO_VS
cmdbuf = PM4CmdSetData::SetShReg(cmdbuf, 0x4au, var, vs_regs[3]); // SPI_SHADER_PGM_RSRC1_VS
cmdbuf = PM4CmdSetData::SetContextReg(cmdbuf, 0x207u, vs_regs[6]); // PA_CL_VS_OUT_CNTL

View File

@ -538,7 +538,7 @@ void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
// openOrbis (to check if it is valid out of OpenOrbis
LIB_FUNCTION("6c3rCVE-fTU", "libkernel", 1, "libkernel", 1, 1,
posix_open); // _open shoudld be equal to open function
posix_open); // _open should be equal to open function
}
} // namespace Libraries::Kernel

View File

@ -15,7 +15,8 @@ namespace Libraries::Kernel {
u64 PS4_SYSV_ABI sceKernelGetDirectMemorySize() {
LOG_WARNING(Kernel_Vmm, "called");
return SCE_KERNEL_MAIN_DMEM_SIZE;
const auto* memory = Core::Memory::Instance();
return memory->GetTotalDirectSize();
}
int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len,
@ -52,8 +53,8 @@ int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u
s32 PS4_SYSV_ABI sceKernelAllocateMainDirectMemory(size_t len, size_t alignment, int memoryType,
s64* physAddrOut) {
return sceKernelAllocateDirectMemory(0, SCE_KERNEL_MAIN_DMEM_SIZE, len, alignment, memoryType,
physAddrOut);
const auto searchEnd = static_cast<s64>(sceKernelGetDirectMemorySize());
return sceKernelAllocateDirectMemory(0, searchEnd, len, alignment, memoryType, physAddrOut);
}
s32 PS4_SYSV_ABI sceKernelCheckedReleaseDirectMemory(u64 start, size_t len) {
@ -75,19 +76,28 @@ s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchE
LOG_WARNING(Kernel_Vmm, "called searchStart = {:#x}, searchEnd = {:#x}, alignment = {:#x}",
searchStart, searchEnd, alignment);
if (searchEnd <= searchStart) {
if (physAddrOut == nullptr || sizeOut == nullptr) {
return ORBIS_KERNEL_ERROR_EINVAL;
}
if (searchEnd > SCE_KERNEL_MAIN_DMEM_SIZE) {
if (searchEnd > sceKernelGetDirectMemorySize()) {
return ORBIS_KERNEL_ERROR_EINVAL;
}
if (searchEnd <= searchStart) {
return ORBIS_KERNEL_ERROR_ENOMEM;
}
auto* memory = Core::Memory::Instance();
PAddr physAddr;
s32 result =
memory->DirectQueryAvailable(searchStart, searchEnd, alignment, &physAddr, sizeOut);
PAddr physAddr{};
size_t size{};
s32 result = memory->DirectQueryAvailable(searchStart, searchEnd, alignment, &physAddr, &size);
if (size == 0) {
return ORBIS_KERNEL_ERROR_ENOMEM;
}
*physAddrOut = static_cast<u64>(physAddr);
*sizeOut = size;
return result;
}
@ -245,46 +255,56 @@ int PS4_SYSV_ABI sceKernelMunmap(void* addr, size_t len);
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, int numEntries,
int* numEntriesOut, int flags) {
int result = ORBIS_OK;
int processed = 0;
int result = 0;
for (int i = 0; i < numEntries; i++) {
for (int i = 0; i < numEntries; i++, processed++) {
if (entries == nullptr || entries[i].length == 0 || entries[i].operation > 4) {
result = ORBIS_KERNEL_ERROR_EINVAL;
break; // break and assign a value to numEntriesOut.
}
if (entries[i].operation == MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_DIRECT) {
switch (entries[i].operation) {
case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_DIRECT: {
result = sceKernelMapNamedDirectMemory(&entries[i].start, entries[i].length,
entries[i].protection, flags,
static_cast<s64>(entries[i].offset), 0, "");
LOG_INFO(
Kernel_Vmm,
"BatchMap: entry = {}, operation = {}, len = {:#x}, offset = {:#x}, type = {}, "
LOG_INFO(Kernel_Vmm,
"entry = {}, operation = {}, len = {:#x}, offset = {:#x}, type = {}, "
"result = {}",
i, entries[i].operation, entries[i].length, entries[i].offset, (u8)entries[i].type,
result);
if (result == 0)
processed++;
} else if (entries[i].operation == MemoryOpTypes::ORBIS_KERNEL_MAP_OP_UNMAP) {
i, entries[i].operation, entries[i].length, entries[i].offset,
(u8)entries[i].type, result);
break;
}
case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_UNMAP: {
result = sceKernelMunmap(entries[i].start, entries[i].length);
LOG_INFO(Kernel_Vmm, "BatchMap: entry = {}, operation = {}, len = {:#x}, result = {}",
i, entries[i].operation, entries[i].length, result);
if (result == 0)
processed++;
} else if (entries[i].operation == MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_FLEXIBLE) {
LOG_INFO(Kernel_Vmm, "entry = {}, operation = {}, len = {:#x}, result = {}", i,
entries[i].operation, entries[i].length, result);
break;
}
case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_FLEXIBLE: {
result = sceKernelMapNamedFlexibleMemory(&entries[i].start, entries[i].length,
entries[i].protection, flags, "");
LOG_INFO(Kernel_Vmm,
"BatchMap: entry = {}, operation = {}, len = {:#x}, type = {}, "
"entry = {}, operation = {}, len = {:#x}, type = {}, "
"result = {}",
i, entries[i].operation, entries[i].length, (u8)entries[i].type, result);
break;
}
case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_TYPE_PROTECT: {
// By now, ignore protection and log it instead
LOG_WARNING(Kernel_Vmm,
"entry = {}, operation = {}, len = {:#x}, type = {} "
"is UNSUPPORTED and skipped",
i, entries[i].operation, entries[i].length, (u8)entries[i].type);
break;
}
default: {
UNREACHABLE();
}
}
if (result == 0)
processed++;
} else {
UNREACHABLE_MSG("called: Unimplemented Operation = {}", entries[i].operation);
if (result != ORBIS_OK) {
break;
}
}
if (numEntriesOut != NULL) { // can be zero. do not return an error code.

View File

@ -6,7 +6,7 @@
#include "common/bit_field.h"
#include "common/types.h"
constexpr u64 SCE_KERNEL_MAIN_DMEM_SIZE = 6_GB; // ~ 6GB
constexpr u64 SCE_KERNEL_MAIN_DMEM_SIZE = 5056_MB; // ~ 5GB
namespace Libraries::Kernel {

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include <mutex>
#include <semaphore>
#include <thread>
#include <semaphore.h>
#include "common/alignment.h"
#include "common/assert.h"
#include "common/error.h"
@ -510,23 +510,24 @@ int PS4_SYSV_ABI scePthreadMutexattrInit(ScePthreadMutexattr* attr) {
int PS4_SYSV_ABI scePthreadMutexattrSettype(ScePthreadMutexattr* attr, int type) {
int ptype = PTHREAD_MUTEX_DEFAULT;
switch (type) {
case 1:
case ORBIS_PTHREAD_MUTEX_ERRORCHECK:
ptype = PTHREAD_MUTEX_ERRORCHECK;
break;
case 2:
case ORBIS_PTHREAD_MUTEX_RECURSIVE:
ptype = PTHREAD_MUTEX_RECURSIVE;
break;
case 3:
case 4:
case ORBIS_PTHREAD_MUTEX_NORMAL:
case ORBIS_PTHREAD_MUTEX_ADAPTIVE:
ptype = PTHREAD_MUTEX_NORMAL;
break;
default:
UNREACHABLE_MSG("Invalid type: {}", type);
return SCE_KERNEL_ERROR_EINVAL;
}
int result = pthread_mutexattr_settype(&(*attr)->pth_mutex_attr, ptype);
ASSERT(result == 0);
return result == 0 ? SCE_OK : SCE_KERNEL_ERROR_EINVAL;
return SCE_OK;
}
int PS4_SYSV_ABI scePthreadMutexattrSetprotocol(ScePthreadMutexattr* attr, int protocol) {
@ -1373,90 +1374,97 @@ int PS4_SYSV_ABI posix_pthread_detach(ScePthread thread) {
return pthread_detach(thread->pth);
}
int PS4_SYSV_ABI posix_sem_init(sem_t* sem, int pshared, unsigned int value) {
int result = sem_init(sem, pshared, value);
if (result == -1) {
SetPosixErrno(errno);
int PS4_SYSV_ABI posix_sem_init(PthreadSemInternal** sem, int pshared, unsigned int value) {
if (value > ORBIS_KERNEL_SEM_VALUE_MAX) {
SetPosixErrno(EINVAL);
return -1;
}
return result;
if (sem != nullptr) {
*sem = new PthreadSemInternal{
.semaphore = std::counting_semaphore<ORBIS_KERNEL_SEM_VALUE_MAX>{value},
.value = {static_cast<int>(value)},
};
}
return 0;
}
int PS4_SYSV_ABI posix_sem_wait(sem_t* sem) {
int result = sem_wait(sem);
if (result == -1) {
SetPosixErrno(errno);
int PS4_SYSV_ABI posix_sem_wait(PthreadSemInternal** sem) {
if (sem == nullptr || *sem == nullptr) {
SetPosixErrno(EINVAL);
return -1;
}
return result;
(*sem)->semaphore.acquire();
--(*sem)->value;
return 0;
}
int PS4_SYSV_ABI posix_sem_trywait(sem_t* sem) {
int result = sem_trywait(sem);
if (result == -1) {
SetPosixErrno(errno);
int PS4_SYSV_ABI posix_sem_trywait(PthreadSemInternal** sem) {
if (sem == nullptr || *sem == nullptr) {
SetPosixErrno(EINVAL);
return -1;
}
return result;
if (!(*sem)->semaphore.try_acquire()) {
SetPosixErrno(EAGAIN);
return -1;
}
--(*sem)->value;
return 0;
}
#ifndef HAVE_SEM_TIMEDWAIT
int sem_timedwait(sem_t* sem, const struct timespec* abstime) {
int rc;
while ((rc = sem_trywait(sem)) == EAGAIN) {
struct timespec curr_time;
clock_gettime(CLOCK_REALTIME, &curr_time);
s64 remaining_ns = 0;
remaining_ns +=
(static_cast<s64>(abstime->tv_sec) - static_cast<s64>(curr_time.tv_sec)) * 1000000000L;
remaining_ns += static_cast<s64>(abstime->tv_nsec) - static_cast<s64>(curr_time.tv_nsec);
if (remaining_ns <= 0) {
return ETIMEDOUT;
int PS4_SYSV_ABI posix_sem_timedwait(PthreadSemInternal** sem, const timespec* t) {
if (sem == nullptr || *sem == nullptr) {
SetPosixErrno(EINVAL);
return -1;
}
struct timespec sleep_time;
sleep_time.tv_sec = 0;
if (remaining_ns < 5000000L) {
sleep_time.tv_nsec = remaining_ns;
} else {
sleep_time.tv_nsec = 5000000;
using std::chrono::duration_cast;
using std::chrono::nanoseconds;
using std::chrono::seconds;
using std::chrono::system_clock;
const system_clock::time_point time{
duration_cast<system_clock::duration>(seconds{t->tv_sec} + nanoseconds{t->tv_nsec})};
if (!(*sem)->semaphore.try_acquire_until(time)) {
SetPosixErrno(ETIMEDOUT);
return -1;
}
--(*sem)->value;
return 0;
}
nanosleep(&sleep_time, nullptr);
int PS4_SYSV_ABI posix_sem_post(PthreadSemInternal** sem) {
if (sem == nullptr || *sem == nullptr) {
SetPosixErrno(EINVAL);
return -1;
}
return rc;
if ((*sem)->value == ORBIS_KERNEL_SEM_VALUE_MAX) {
SetPosixErrno(EOVERFLOW);
return -1;
}
#endif
int PS4_SYSV_ABI posix_sem_timedwait(sem_t* sem, const timespec* t) {
int result = sem_timedwait(sem, t);
if (result == -1) {
SetPosixErrno(errno);
}
return result;
++(*sem)->value;
(*sem)->semaphore.release();
return 0;
}
int PS4_SYSV_ABI posix_sem_post(sem_t* sem) {
int result = sem_post(sem);
if (result == -1) {
SetPosixErrno(errno);
int PS4_SYSV_ABI posix_sem_destroy(PthreadSemInternal** sem) {
if (sem == nullptr || *sem == nullptr) {
SetPosixErrno(EINVAL);
return -1;
}
return result;
delete *sem;
*sem = nullptr;
return 0;
}
int PS4_SYSV_ABI posix_sem_destroy(sem_t* sem) {
int result = sem_destroy(sem);
if (result == -1) {
SetPosixErrno(errno);
int PS4_SYSV_ABI posix_sem_getvalue(PthreadSemInternal** sem, int* sval) {
if (sem == nullptr || *sem == nullptr) {
SetPosixErrno(EINVAL);
return -1;
}
return result;
if (sval) {
*sval = (*sem)->value;
}
int PS4_SYSV_ABI posix_sem_getvalue(sem_t* sem, int* sval) {
int result = sem_getvalue(sem, sval);
if (result == -1) {
SetPosixErrno(errno);
}
return result;
return 0;
}
int PS4_SYSV_ABI posix_pthread_attr_getstacksize(const pthread_attr_t* attr, size_t* size) {

View File

@ -5,6 +5,7 @@
#include <atomic>
#include <mutex>
#include <semaphore>
#include <string>
#include <vector>
#include <pthread.h>
@ -19,6 +20,12 @@ namespace Libraries::Kernel {
constexpr int ORBIS_KERNEL_PRIO_FIFO_DEFAULT = 700;
constexpr int ORBIS_KERNEL_PRIO_FIFO_HIGHEST = 256;
constexpr int ORBIS_KERNEL_PRIO_FIFO_LOWEST = 767;
constexpr int ORBIS_KERNEL_SEM_VALUE_MAX = 0x7FFFFFFF;
constexpr int ORBIS_PTHREAD_MUTEX_ERRORCHECK = 1;
constexpr int ORBIS_PTHREAD_MUTEX_RECURSIVE = 2;
constexpr int ORBIS_PTHREAD_MUTEX_NORMAL = 3;
constexpr int ORBIS_PTHREAD_MUTEX_ADAPTIVE = 4;
struct PthreadInternal;
struct PthreadAttrInternal;
@ -104,6 +111,11 @@ struct PthreadRwInternal {
std::string name;
};
struct PthreadSemInternal {
std::counting_semaphore<ORBIS_KERNEL_SEM_VALUE_MAX> semaphore;
std::atomic<s32> value;
};
class PThreadPool {
public:
ScePthread Create();

View File

@ -3,6 +3,7 @@
#include <thread>
#include "common/assert.h"
#include "common/debug.h"
#include "common/native_clock.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/kernel/time_management.h"
@ -30,7 +31,8 @@ u64 PS4_SYSV_ABI sceKernelGetTscFrequency() {
}
u64 PS4_SYSV_ABI sceKernelGetProcessTime() {
return clock->GetProcessTimeUS();
// TODO: this timer should support suspends, so initial ptc needs to be updated on wake up
return clock->GetTimeUS(initial_ptc);
}
u64 PS4_SYSV_ABI sceKernelGetProcessTimeCounter() {

View File

@ -3,54 +3,116 @@
#pragma once
constexpr int ORBIS_NGS2_ERROR_INVALID_PARAMETERS = 0x804A0001;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAXIMUM_GRAIN_SAMPLES = 0x804A0050;
constexpr int ORBIS_NGS2_ERROR_INVALID_GRAIN_SAMPLES = 0x804A0051;
constexpr int ORBIS_NGS2_ERROR_INVALID_CHANNELS = 0x804A0052;
constexpr int ORBIS_NGS2_ERROR_INVALD_ADDRESS = 0x804A0053;
constexpr int ORBIS_NGS2_ERROR_INVALD_SIZE = 0x804A0054;
constexpr int ORBIS_NGS2_ERROR_FAIL = 0x804A0001;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_GRAIN_SAMPLES = 0x804A0050;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_GRAIN_SAMPLES = 0x804A0051;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_CHANNELS = 0x804A0052;
constexpr int ORBIS_NGS2_ERROR_INVALID_OUT_ADDRESS = 0x804A0053;
constexpr int ORBIS_NGS2_ERROR_INVALID_OUT_SIZE = 0x804A0054;
constexpr int ORBIS_NGS2_ERROR_INVALID_OPTION_ADDRESS = 0x804A0080;
constexpr int ORBIS_NGS2_ERROR_INVALID_OPTION_SIZE = 0x804A0081;
constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_OPTION_MAX_MATRICES = 0x804A0100;
constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_OPTION_MAX_PORTS = 0x804A0101;
constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_OPTION_MAX_INPUT_DELAY_BLOCKS = 0x804A0102;
constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_LEVELS = 0x804A0150;
constexpr int ORBIS_NGS2_ERROR_SAMPLER_WAVEFORM_TERMINATED = 0x804A0151;
constexpr int ORBIS_NGS2_ERROR_INVALID_ENVELOPE_POINTS = 0x804A0152;
constexpr int ORBIS_NGS2_ERROR_INVALID_OPTION_FLAG = 0x804A0082;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_MATRICES = 0x804A0100;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_PORTS = 0x804A0101;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_INPUT_DELAY_BLOCKS = 0x804A0102;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_VOICES = 0x804A0103;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CHANNELS = 0x804A0104;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CHANNEL_WORKS = 0x804A0105;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_WAVEFORM_BLOCKS = 0x804A0106;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_ENVELOPE_POINTS = 0x804A0107;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_FILTERS = 0x804A0108;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CODEC_CACHES = 0x804A0109;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_ATRAC9_DECODERS = 0x804A010A;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_ATRAC9_CHANNEL_WORKS = 0x804A010B;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_INPUTS = 0x804A010C;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_MATRIX_LEVELS = 0x804A0150;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_WAVEFORM_BLOCKS = 0x804A0151;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_ENVELOPE_POINTS = 0x804A0152;
constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_LEVEL_ADDRESS = 0x804A0153;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_BLOCK_ADDRESS = 0x804A0154;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_BLOCK_ADDRESS = 0x804A0154;
constexpr int ORBIS_NGS2_ERROR_INVALID_ENVELOPE_POINT_ADDRESS = 0x804A0155;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_PEAKMETER_BLOCKS = 0x804A0156;
constexpr int ORBIS_NGS2_ERROR_INVALID_HANDLE = 0x804A0200;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLE_RATE = 0x804A0201;
constexpr int ORBIS_NGS2_ERROR_INVALID_REPORT_TYPE = 0x804A0202;
constexpr int ORBIS_NGS2_ERROR_INVALID_REPORT_HANDLER = 0x804A0203;
constexpr int ORBIS_NGS2_ERROR_INVALID_REPORT_HANDLE = 0x804A0204;
constexpr int ORBIS_NGS2_ERROR_EMPTY_REPORT_HANDLE = 0x804A0205;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_INFO = 0x804A0206;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ADDRESS = 0x804A0207;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ALIGNMENT = 0x804A0208;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ALIGN = 0x804A0208;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_SIZE = 0x804A0209;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ALLOCATOR = 0x804A020A;
constexpr int ORBIS_NGS2_ERROR_BUFFER_VERIFY_FAILED = 0x804A020B;
constexpr int ORBIS_NGS2_ERROR_MODULE_PLAYER_DATA_EMPTY = 0x804A020C;
constexpr int ORBIS_NGS2_ERROR_BUFFER_BROKEN = 0x804A020B;
constexpr int ORBIS_NGS2_ERROR_EMPTY_BUFFER = 0x804A020C;
constexpr int ORBIS_NGS2_ERROR_INVALID_SYSTEM_HANDLE = 0x804A0230;
constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_ID = 0x804A0260;
constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_HANDLE = 0x804A0261;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_HANDLE = 0x804A0300;
constexpr int ORBIS_NGS2_ERROR_UNINIT_VOICE = 0x804A0301;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_INDEX = 0x804A0302;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_EVENT = 0x804A0303;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_PORT_INDEX = 0x804A0304;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_INPUT_OR_RACK_OCCUPIED = 0x804A0305;
constexpr int ORBIS_NGS2_ERROR_INVALID_CONTROL_ID = 0x804A0308;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_PARAMETER = 0x804A0309;
constexpr int ORBIS_NGS2_ERROR_INVALID_PARAMETER_SIZE = 0x804A030A;
constexpr int ORBIS_NGS2_ERROR_INVALID_EVENT_TYPE = 0x804A0303;
constexpr int ORBIS_NGS2_ERROR_INVALID_PORT_INDEX = 0x804A0304;
constexpr int ORBIS_NGS2_ERROR_INVALID_PATCH = 0x804A0305;
constexpr int ORBIS_NGS2_ERROR_EMPTY_CHANNEL_WORK = 0x804A0306;
constexpr int ORBIS_NGS2_ERROR_EMPTY_CODEC_DECODER = 0x804A0307;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_ID = 0x804A0308;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_ADDRESS = 0x804A0309;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_SIZE = 0x804A030A;
constexpr int ORBIS_NGS2_ERROR_DETECTED_CIRCULAR_VOICE_CONTROL = 0x804A030B;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_DATA = 0x804A0400;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_FORMAT = 0x804A0401;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_TYPE_NO_ATRAC9_DECODERS = 0x804A0402;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_ATRAC9_CONFIG_DATA = 0x804A0403;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_SAMPLE_RATE = 0x804A0404;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_FRAME = 0x804A0405;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_ADDRESS = 0x804A0406;
constexpr int ORBIS_NGS2_ERROR_UNABLE_CALLBACK = 0x804A030C;
constexpr int ORBIS_NGS2_ERROR_INVALID_CALLBACK_FLAG = 0x804A030D;
constexpr int ORBIS_NGS2_ERROR_INVALID_CALLBACK_HANDLER = 0x804A030E;
constexpr int ORBIS_NGS2_ERROR_INVALID_OPERATION = 0x804A030F;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_FORMAT = 0x804A0400;
constexpr int ORBIS_NGS2_ERROR_UNKNOWN_WAVEFORM_FORMAT = 0x804A0401;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_TYPE = 0x804A0402;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_CONFIG = 0x804A0403;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_SAMPLE_RATE = 0x804A0404;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_FRAME = 0x804A0405;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_ADDRESS = 0x804A0406;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_SIZE = 0x804A0407;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_DATA = 0x804A0408;
constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_BLOCK_NUM_REPEATS = 0x804A0409;
constexpr int ORBIS_NGS2_ERROR_INVALID_ENVELOPE_CURVE = 0x804A0500;
constexpr int ORBIS_NGS2_ERROR_INVALID_PEAKMETER_FLAG = 0x804A0510;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CHORUS_PHASES = 0x804A0520;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_CHORUS_PHASES = 0x804A0521;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_DELAY_LENGTH = 0x804A0530;
constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_DELAY_TAPS = 0x804A0531;
constexpr int ORBIS_NGS2_ERROR_INVALID_DELAY_TYPE = 0x804A0532;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_DELAY_TAPS = 0x804A0533;
constexpr int ORBIS_NGS2_ERROR_INVALID_DELAY_TAP_INFO = 0x804A0534;
constexpr int ORBIS_NGS2_ERROR_INVALID_PITCH_SHIFT_QUALITY = 0x804A0540;
constexpr int ORBIS_NGS2_ERROR_INVALID_FILTER_INDEX = 0x804A0600;
constexpr int ORBIS_NGS2_ERROR_INVALID_FILTER_TYPE = 0x804A0601;
constexpr int ORBIS_NGS2_ERROR_INVALID_FILTER_LOCATION = 0x804A0602;
constexpr int ORBIS_NGS2_ERROR_INVALID_LFE_CUT_OFF_FREQUENCY = 0x804A0603;
constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_INDEX_OR_TYPE = 0x804A0700;
constexpr int ORBIS_NGS2_ERROR_INVALID_LFE_FC = 0x804A0603;
constexpr int ORBIS_NGS2_ERROR_INVALID_USER_FX_PARAM_SIZE = 0x804A0650;
constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_INDEX = 0x804A0700;
constexpr int ORBIS_NGS2_ERROR_CODEC_UNKNOWN_WAVEFORM = 0x804A0800;
constexpr int ORBIS_NGS2_ERROR_CODEC_EMPTY_INSTANCE = 0x804A0801;
constexpr int ORBIS_NGS2_ERROR_CODEC_EMPTY_CHANNEL = 0x804A0802;
constexpr int ORBIS_NGS2_ERROR_CODEC_SETUP_FAIL = 0x804A0803;
constexpr int ORBIS_NGS2_ERROR_CODEC_RESET_FAIL = 0x804A0804;
constexpr int ORBIS_NGS2_ERROR_CODEC_DECODE_FAIL = 0x804A0805;
constexpr int ORBIS_NGS2_ERROR_INVALID_REVERB_SIZE = 0x804A0900;
constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_UNIT_ANGLE = 0x804A0910;
constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_SPEAKER = 0x804A0911;
constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_MATRIX_FORMAT = 0x804A0912;
constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_WORK = 0x804A0913;
constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_PARAM = 0x804A0914;
constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_DISTANCE = 0x804A0920;
constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_LISTENER_ADDRESS = 0x804A0921;
constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_SOURCE_ADDRESS = 0x804A0922;
constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_FLAG = 0x804A0923;
constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_CONE = 0x804A0924;
constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_ID = 0x804A0A00;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_MODULES = 0x804A0A01;
constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_MODULE_BUFFERS = 0x804A0A02;
constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_BUFFER_ID = 0x804A0A03;
constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_STATE_OFFSET = 0x804A0A04;
constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_STATE_SIZE = 0x804A0A05;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_STATE_SIZE = 0x804A0A06;
constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_INDEX = 0x804A0B00;
constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_INFO_SIZE = 0x804A0B01;

View File

@ -138,13 +138,13 @@ s32 Ngs2::SystemSetupCore(StackBuffer* buf, SystemOptions* options, Ngs2Handle**
// Validate maxGrainSamples
if (maxGrainSamples < 64 || maxGrainSamples > 1024 || (maxGrainSamples & 0x3F) != 0) {
LOG_ERROR(Lib_Ngs2, "Invalid system option (maxGrainSamples={},x64)", maxGrainSamples);
return ORBIS_NGS2_ERROR_INVALID_MAXIMUM_GRAIN_SAMPLES;
return ORBIS_NGS2_ERROR_INVALID_MAX_GRAIN_SAMPLES;
}
// Validate numGrainSamples
if (numGrainSamples < 64 || numGrainSamples > 1024 || (numGrainSamples & 0x3F) != 0) {
LOG_ERROR(Lib_Ngs2, "Invalid system option (numGrainSamples={},x64)", numGrainSamples);
return ORBIS_NGS2_ERROR_INVALID_GRAIN_SAMPLES;
return ORBIS_NGS2_ERROR_INVALID_NUM_GRAIN_SAMPLES;
}
// Validate sampleRate

View File

@ -4,6 +4,7 @@
// Generated By moduleGenerator
#include <common/assert.h>
#include <common/singleton.h>
#include "common/config.h"
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
@ -25,6 +26,9 @@ int PS4_SYSV_ABI scePadConnectPort() {
int PS4_SYSV_ABI scePadDeviceClassGetExtendedInformation(
s32 handle, OrbisPadDeviceClassExtendedInformation* pExtInfo) {
LOG_ERROR(Lib_Pad, "(STUBBED) called");
if (Config::getUseSpecialPad()) {
pExtInfo->deviceClass = (OrbisPadDeviceClass)Config::getSpecialPadClass();
}
return ORBIS_OK;
}
@ -107,6 +111,10 @@ int PS4_SYSV_ABI scePadGetControllerInformation(s32 handle, OrbisPadControllerIn
pInfo->connectedCount = 1;
pInfo->connected = true;
pInfo->deviceClass = ORBIS_PAD_DEVICE_CLASS_STANDARD;
if (Config::getUseSpecialPad()) {
pInfo->connectionType = ORBIS_PAD_PORT_TYPE_SPECIAL;
pInfo->deviceClass = (OrbisPadDeviceClass)Config::getSpecialPadClass();
}
return SCE_OK;
}
@ -239,11 +247,26 @@ int PS4_SYSV_ABI scePadMbusTerm() {
int PS4_SYSV_ABI scePadOpen(s32 userId, s32 type, s32 index, const OrbisPadOpenParam* pParam) {
LOG_INFO(Lib_Pad, "(DUMMY) called user_id = {} type = {} index = {}", userId, type, index);
if (Config::getUseSpecialPad()) {
if (type != ORBIS_PAD_PORT_TYPE_SPECIAL)
return ORBIS_PAD_ERROR_DEVICE_NOT_CONNECTED;
} else {
if (type != ORBIS_PAD_PORT_TYPE_STANDARD)
return ORBIS_PAD_ERROR_DEVICE_NOT_CONNECTED;
}
return 1; // dummy
}
int PS4_SYSV_ABI scePadOpenExt() {
int PS4_SYSV_ABI scePadOpenExt(s32 userId, s32 type, s32 index,
const OrbisPadOpenExtParam* pParam) {
LOG_ERROR(Lib_Pad, "(STUBBED) called");
if (Config::getUseSpecialPad()) {
if (type != ORBIS_PAD_PORT_TYPE_SPECIAL)
return ORBIS_PAD_ERROR_DEVICE_NOT_CONNECTED;
} else {
if (type != ORBIS_PAD_PORT_TYPE_STANDARD)
return ORBIS_PAD_ERROR_DEVICE_NOT_CONNECTED;
}
return 1; // dummy
}
@ -286,12 +309,13 @@ int PS4_SYSV_ABI scePadRead(s32 handle, OrbisPadData* pData, s32 num) {
pData[i].angularVelocity.x = 0.0f;
pData[i].angularVelocity.y = 0.0f;
pData[i].angularVelocity.z = 0.0f;
pData[i].touchData.touchNum = 0;
pData[i].touchData.touch[0].x = 0;
pData[i].touchData.touch[0].y = 0;
pData[i].touchData.touchNum =
(states[i].touchpad[0].state ? 1 : 0) + (states[i].touchpad[1].state ? 1 : 0);
pData[i].touchData.touch[0].x = states[i].touchpad[0].x;
pData[i].touchData.touch[0].y = states[i].touchpad[0].y;
pData[i].touchData.touch[0].id = 1;
pData[i].touchData.touch[1].x = 0;
pData[i].touchData.touch[1].y = 0;
pData[i].touchData.touch[1].x = states[i].touchpad[1].x;
pData[i].touchData.touch[1].y = states[i].touchpad[1].y;
pData[i].touchData.touch[1].id = 2;
pData[i].connected = connected;
pData[i].timestamp = states[i].time;

View File

@ -229,6 +229,13 @@ struct OrbisPadOpenParam {
u8 reserve[8];
};
struct OrbisPadOpenExtParam {
u16 vendorId;
u16 productId;
u16 productId_2;
u8 reserve[10];
};
struct OrbisPadLightBarParam {
u8 r;
u8 g;
@ -284,7 +291,7 @@ int PS4_SYSV_ABI scePadIsValidHandle();
int PS4_SYSV_ABI scePadMbusInit();
int PS4_SYSV_ABI scePadMbusTerm();
int PS4_SYSV_ABI scePadOpen(s32 userId, s32 type, s32 index, const OrbisPadOpenParam* pParam);
int PS4_SYSV_ABI scePadOpenExt();
int PS4_SYSV_ABI scePadOpenExt(s32 userId, s32 type, s32 index, const OrbisPadOpenExtParam* pParam);
int PS4_SYSV_ABI scePadOpenExt2();
int PS4_SYSV_ABI scePadOutputReport();
int PS4_SYSV_ABI scePadRead(s32 handle, OrbisPadData* pData, s32 num);

View File

@ -1,14 +1,16 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "random.h"
#include "random_error.h"
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "random.h"
namespace Libraries::Random {
s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, size_t size) {
s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, std::size_t size) {
LOG_TRACE(Lib_Random, "called");
if (size > SCE_RANDOM_MAX_SIZE) {
return SCE_RANDOM_ERROR_INVALID;

View File

@ -11,7 +11,7 @@ class SymbolsResolver;
namespace Libraries::Random {
constexpr int32_t SCE_RANDOM_MAX_SIZE = 64;
s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, size_t size);
s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, std::size_t size);
void RegisterlibSceRandom(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::Random

View File

@ -0,0 +1,8 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
constexpr int SCE_RANDOM_ERROR_INVALID = 0x817C0016;
constexpr int SCE_RANDOM_ERROR_OUT_OF_RESOURCES = 0x817C001C;
constexpr int SCE_RANDOM_ERROR_FATAL = 0x817C00FF;

View File

@ -505,8 +505,11 @@ s32 saveDataMount(u32 user_id, char* dir_name, u32 mount_mode,
ORBIS_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_RDWR |
ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF |
ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON: {
ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_RDWR |
ORBIS_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF | ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON: {
if (std::filesystem::exists(mount_dir)) {
return ORBIS_SAVE_DATA_ERROR_EXISTS;
}

View File

@ -96,7 +96,7 @@ int VideoOutDriver::RegisterBuffers(VideoOutPort* port, s32 startIndex, void* co
}
if (attribute->reserved0 != 0 || attribute->reserved1 != 0) {
LOG_ERROR(Lib_VideoOut, "Invalid reserved memebers");
LOG_ERROR(Lib_VideoOut, "Invalid reserved members");
return ORBIS_VIDEO_OUT_ERROR_INVALID_VALUE;
}
if (attribute->aspect_ratio != 0) {

View File

@ -185,10 +185,12 @@ s32 PS4_SYSV_ABI sceVideoOutGetFlipStatus(s32 handle, FlipStatus* status) {
return ORBIS_VIDEO_OUT_ERROR_INVALID_HANDLE;
}
{
std::unique_lock lock{port->port_mutex};
*status = port->flip_status;
}
LOG_INFO(Lib_VideoOut,
LOG_TRACE(Lib_VideoOut,
"count = {}, processTime = {}, tsc = {}, submitTsc = {}, flipArg = {}, gcQueueNum = "
"{}, flipPendingNum = {}, currentBuffer = {}",
status->count, status->processTime, status->tsc, status->submitTsc, status->flipArg,

View File

@ -68,11 +68,19 @@ void Linker::Execute() {
}
// Configure used flexible memory size.
// if (auto* mem_param = GetProcParam()->mem_param) {
// if (u64* flexible_size = mem_param->flexible_memory_size) {
// memory->SetTotalFlexibleSize(*flexible_size);
// }
// }
if (const auto* proc_param = GetProcParam()) {
if (proc_param->size >=
offsetof(OrbisProcParam, mem_param) + sizeof(OrbisKernelMemParam*)) {
if (const auto* mem_param = proc_param->mem_param) {
if (mem_param->size >=
offsetof(OrbisKernelMemParam, flexible_memory_size) + sizeof(u64*)) {
if (const auto* flexible_size = mem_param->flexible_memory_size) {
memory->SetupMemoryRegions(*flexible_size);
}
}
}
}
}
// Init primary thread.
Common::SetCurrentThreadName("GAME_MainThread");
@ -168,7 +176,7 @@ void Linker::Relocate(Module* module) {
auto sym_bind = sym.GetBind();
auto sym_type = sym.GetType();
auto sym_visibility = sym.GetVisibility();
u64 symbol_vitrual_addr = 0;
u64 symbol_virtual_addr = 0;
Loader::SymbolRecord symrec{};
switch (sym_type) {
case STT_FUN:
@ -185,12 +193,12 @@ void Linker::Relocate(Module* module) {
}
if (sym_visibility != 0) {
LOG_INFO(Core_Linker, "symbol visilibity !=0");
LOG_INFO(Core_Linker, "symbol visibility !=0");
}
switch (sym_bind) {
case STB_LOCAL:
symbol_vitrual_addr = rel_base_virtual_addr + sym.st_value;
symbol_virtual_addr = rel_base_virtual_addr + sym.st_value;
module->SetRelaBit(bit_idx);
break;
case STB_GLOBAL:
@ -200,14 +208,14 @@ void Linker::Relocate(Module* module) {
// Only set the rela bit if the symbol was actually resolved and not stubbed.
module->SetRelaBit(bit_idx);
}
symbol_vitrual_addr = symrec.virtual_address;
symbol_virtual_addr = symrec.virtual_address;
break;
}
default:
ASSERT_MSG(0, "unknown bind type {}", sym_bind);
}
rel_is_resolved = (symbol_vitrual_addr != 0);
rel_value = (rel_is_resolved ? symbol_vitrual_addr + addend : 0);
rel_is_resolved = (symbol_virtual_addr != 0);
rel_value = (rel_is_resolved ? symbol_virtual_addr + addend : 0);
rel_name = symrec.name;
break;
}

View File

@ -11,9 +11,11 @@
namespace Core {
constexpr u64 SCE_DEFAULT_FLEXIBLE_MEMORY_SIZE = 448_MB;
MemoryManager::MemoryManager() {
// Insert an area that covers direct memory physical block.
dmem_map.emplace(0, DirectMemoryArea{0, SCE_KERNEL_MAIN_DMEM_SIZE});
// Set up the direct and flexible memory regions.
SetupMemoryRegions(SCE_DEFAULT_FLEXIBLE_MEMORY_SIZE);
// Insert a virtual memory area that covers the entire area we manage.
const VAddr system_managed_base = impl.SystemManagedVirtualBase();
@ -35,6 +37,19 @@ MemoryManager::MemoryManager() {
MemoryManager::~MemoryManager() = default;
void MemoryManager::SetupMemoryRegions(u64 flexible_size) {
total_flexible_size = flexible_size;
total_direct_size = SCE_KERNEL_MAIN_DMEM_SIZE - flexible_size;
// Insert an area that covers direct memory physical block.
// Note that this should never be called after direct memory allocations have been made.
dmem_map.clear();
dmem_map.emplace(0, DirectMemoryArea{0, total_direct_size});
LOG_INFO(Kernel_Vmm, "Configured memory regions: flexible size = {:#x}, direct size = {:#x}",
total_flexible_size, total_direct_size);
}
PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size, u64 alignment,
int memory_type) {
std::scoped_lock lk{mutex};
@ -42,12 +57,17 @@ PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size,
auto dmem_area = FindDmemArea(search_start);
const auto is_suitable = [&] {
return dmem_area->second.is_free && dmem_area->second.size >= size;
const auto aligned_base = alignment > 0 ? Common::AlignUp(dmem_area->second.base, alignment)
: dmem_area->second.base;
const auto alignment_size = aligned_base - dmem_area->second.base;
const auto remaining_size =
dmem_area->second.size >= alignment_size ? dmem_area->second.size - alignment_size : 0;
return dmem_area->second.is_free && remaining_size >= size;
};
while (!is_suitable() && dmem_area->second.GetEnd() <= search_end) {
dmem_area++;
}
ASSERT_MSG(is_suitable(), "Unable to find free direct memory area");
ASSERT_MSG(is_suitable(), "Unable to find free direct memory area: size = {:#x}", size);
// Align free position
PAddr free_addr = dmem_area->second.base;
@ -328,14 +348,24 @@ int MemoryManager::DirectQueryAvailable(PAddr search_start, PAddr search_end, si
PAddr paddr{};
size_t max_size{};
while (dmem_area != dmem_map.end() && dmem_area->second.GetEnd() <= search_end) {
if (dmem_area->second.size > max_size) {
paddr = dmem_area->second.base;
max_size = dmem_area->second.size;
if (!dmem_area->second.is_free) {
dmem_area++;
continue;
}
const auto aligned_base = alignment > 0 ? Common::AlignUp(dmem_area->second.base, alignment)
: dmem_area->second.base;
const auto alignment_size = aligned_base - dmem_area->second.base;
const auto remaining_size =
dmem_area->second.size >= alignment_size ? dmem_area->second.size - alignment_size : 0;
if (remaining_size > max_size) {
paddr = aligned_base;
max_size = remaining_size;
}
dmem_area++;
}
*phys_addr_out = alignment > 0 ? Common::AlignUp(paddr, alignment) : paddr;
*phys_addr_out = paddr;
*size_out = max_size;
return ORBIS_OK;
}
@ -344,7 +374,7 @@ void MemoryManager::NameVirtualRange(VAddr virtual_addr, size_t size, std::strin
auto it = FindVMA(virtual_addr);
ASSERT_MSG(it->second.Contains(virtual_addr, size),
"Range provided is not fully containted in vma");
"Range provided is not fully contained in vma");
it->second.name = name;
}
VAddr MemoryManager::SearchFree(VAddr virtual_addr, size_t size, u32 alignment) {
@ -413,7 +443,8 @@ MemoryManager::DMemHandle MemoryManager::CarveDmemArea(PAddr addr, size_t size)
const PAddr start_in_area = addr - area.base;
const PAddr end_in_vma = start_in_area + size;
ASSERT_MSG(end_in_vma <= area.size, "Mapping cannot fit inside free region");
ASSERT_MSG(end_in_vma <= area.size, "Mapping cannot fit inside free region: size = {:#x}",
size);
if (end_in_vma != area.size) {
// Split VMA at the end of the allocated region

View File

@ -130,8 +130,8 @@ public:
rasterizer = rasterizer_;
}
void SetTotalFlexibleSize(u64 size) {
total_flexible_size = size;
u64 GetTotalDirectSize() const {
return total_direct_size;
}
u64 GetAvailableFlexibleSize() const {
@ -142,6 +142,8 @@ public:
return impl.SystemReservedVirtualBase();
}
void SetupMemoryRegions(u64 flexible_size);
PAddr Allocate(PAddr search_start, PAddr search_end, size_t size, u64 alignment,
int memory_type);
@ -217,7 +219,8 @@ private:
DMemMap dmem_map;
VMAMap vma_map;
std::recursive_mutex mutex;
size_t total_flexible_size = 448_MB;
size_t total_direct_size{};
size_t total_flexible_size{};
size_t flexible_usage{};
Vulkan::Rasterizer* rasterizer{};
};

View File

@ -5,6 +5,9 @@
#include "common/alignment.h"
#include "common/assert.h"
#include "common/logging/log.h"
#ifdef ENABLE_QT_GUI
#include "qt_gui/memory_patcher.h"
#endif
#include "common/string_util.h"
#include "core/aerolib/aerolib.h"
#include "core/cpu_patches.h"
@ -192,6 +195,16 @@ void Module::LoadModuleToMemory(u32& max_tls_index) {
const VAddr entry_addr = base_virtual_addr + elf.GetElfEntry();
LOG_INFO(Core_Linker, "program entry addr ..........: {:#018x}", entry_addr);
#ifdef ENABLE_QT_GUI
if (MemoryPatcher::g_eboot_address == 0) {
if (name == "eboot") {
MemoryPatcher::g_eboot_address = base_virtual_addr;
MemoryPatcher::g_eboot_image_size = base_size;
MemoryPatcher::OnGameLoaded();
}
}
#endif
}
void Module::LoadDynamicInfo() {

View File

@ -7,6 +7,9 @@
#include "common/debug.h"
#include "common/logging/backend.h"
#include "common/logging/log.h"
#ifdef ENABLE_QT_GUI
#include "qt_gui/memory_patcher.h"
#endif
#include "common/ntapi.h"
#include "common/path_util.h"
#include "common/polyfill_thread.h"
@ -93,6 +96,9 @@ void Emulator::Run(const std::filesystem::path& file) {
auto* param_sfo = Common::Singleton<PSF>::Instance();
param_sfo->open(sce_sys_folder.string() + "/param.sfo", {});
id = std::string(param_sfo->GetString("CONTENT_ID"), 7, 9);
#ifdef ENABLE_QT_GUI
MemoryPatcher::g_game_serial = id;
#endif
title = param_sfo->GetString("TITLE");
LOG_INFO(Loader, "Game id: {} Title: {}", id, title);
u32 fw_version = param_sfo->GetInteger("SYSTEM_VER");

View File

@ -132,15 +132,29 @@ bool GameController::SetVibration(u8 smallMotor, u8 largeMotor) {
return true;
}
void GameController::SetTouchpadState(int touchIndex, bool touchDown, float x, float y) {
if (touchIndex < 2) {
std::scoped_lock lock{m_mutex};
auto state = GetLastState();
state.time = Libraries::Kernel::sceKernelGetProcessTime();
state.touchpad[touchIndex].state = touchDown;
state.touchpad[touchIndex].x = static_cast<u16>(x * 1920);
state.touchpad[touchIndex].y = static_cast<u16>(y * 941);
AddState(state);
}
}
void GameController::TryOpenSDLController() {
if (m_sdl_gamepad == nullptr || !SDL_GamepadConnected(m_sdl_gamepad)) {
int gamepad_count;
SDL_JoystickID* gamepads = SDL_GetGamepads(&gamepad_count);
m_sdl_gamepad = gamepad_count > 0 ? SDL_OpenGamepad(gamepads[0]) : nullptr;
SDL_free(gamepads);
}
SetLightBarRGB(0, 0, 255);
}
}
} // namespace Input

View File

@ -21,10 +21,17 @@ enum class Axis {
AxisMax
};
struct TouchpadEntry {
bool state{};
u16 x{};
u16 y{};
};
struct State {
u32 buttonsState = 0;
u64 time = 0;
int axes[static_cast<int>(Axis::AxisMax)] = {128, 128, 128, 128, 0, 0};
TouchpadEntry touchpad[2] = {{false, 0, 0}, {false, 0, 0}};
};
inline int GetAxis(int min, int max, int value) {
@ -47,6 +54,7 @@ public:
void Axis(int id, Input::Axis axis, int value);
void SetLightBarRGB(u8 r, u8 g, u8 b);
bool SetVibration(u8 smallMotor, u8 largeMotor);
void SetTouchpadState(int touchIndex, bool touchDown, float x, float y);
void TryOpenSDLController();
private:

File diff suppressed because it is too large Load Diff

115
src/qt_gui/cheats_patches.h Normal file
View File

@ -0,0 +1,115 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#ifndef CHEATS_PATCHES_H
#define CHEATS_PATCHES_H
#include <QCheckBox>
#include <QComboBox>
#include <QGroupBox>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QLabel>
#include <QListView>
#include <QMap>
#include <QNetworkAccessManager>
#include <QPixmap>
#include <QPushButton>
#include <QScrollArea>
#include <QString>
#include <QTabWidget>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QVector>
#include <QWidget>
class CheatsPatches : public QWidget {
Q_OBJECT
public:
CheatsPatches(const QString& gameName, const QString& gameSerial, const QString& gameVersion,
const QString& gameSize, const QPixmap& gameImage, QWidget* parent = nullptr);
~CheatsPatches();
// Public Methods
void downloadCheats(const QString& source, const QString& m_gameSerial,
const QString& m_gameVersion, bool showMessageBox);
void downloadPatches(const QString repository, const bool showMessageBox);
signals:
void downloadFinished();
private:
// UI Setup and Event Handlers
void setupUI();
void onSaveButtonClicked();
QCheckBox* findCheckBoxByName(const QString& name);
bool eventFilter(QObject* obj, QEvent* event);
void onPatchCheckBoxHovered(QCheckBox* checkBox, bool hovered);
// Cheat and Patch Management
void populateFileListCheats();
void populateFileListPatches();
void addCheatsToLayout(const QJsonArray& modsArray, const QJsonArray& creditsArray);
void addPatchesToLayout(const QString& serial);
void applyCheat(const QString& modName, bool enabled);
void applyPatch(const QString& patchName, bool enabled);
void createFilesJson(const QString& repository);
void uncheckAllCheatCheckBoxes();
void updateNoteTextEdit(const QString& patchName);
// Network Manager
QNetworkAccessManager* manager;
// Patch Info Structures
struct MemoryMod {
QString offset;
QString on;
QString off;
};
struct Cheat {
QString name;
QString type;
bool hasHint;
QVector<MemoryMod> memoryMods;
};
struct PatchInfo {
QString name;
QString author;
QString note;
QJsonArray linesArray;
QString serial;
};
// Members
QString m_gameName;
QString m_gameSerial;
QString m_gameVersion;
QString m_gameSize;
QPixmap m_gameImage;
QString m_cheatFilePath;
QMap<QString, Cheat> m_cheats;
QMap<QString, PatchInfo> m_patchInfos;
QVector<QCheckBox*> m_cheatCheckBoxes;
// UI Elements
QVBoxLayout* rightLayout;
QVBoxLayout* patchesGroupBoxLayout;
QGroupBox* patchesGroupBox;
QVBoxLayout* patchesLayout;
QTextEdit* instructionsTextEdit;
QListView* listView_selectFile;
QItemSelectionModel* selectionModel;
QComboBox* patchesComboBox;
QListView* patchesListView;
QString defaultTextEdit;
};
#endif // CHEATS_PATCHES_H

View File

@ -23,8 +23,8 @@ void GameInfoClass::GetGameInfo(QWidget* parent) {
}).results();
// Progress bar, please be patient :)
QProgressDialog dialog("Loading game list, please wait :3", "Cancel", 0, 0, parent);
dialog.setWindowTitle("Loading...");
QProgressDialog dialog(tr("Loading game list, please wait :3"), tr("Cancel"), 0, 0, parent);
dialog.setWindowTitle(tr("Loading..."));
QFutureWatcher<void> futureWatcher;
GameListUtils game_util;

View File

@ -21,14 +21,14 @@ GameInstallDialog::GameInstallDialog() : m_gamesDirectory(nullptr) {
layout->addStretch();
layout->addWidget(SetupDialogActions());
setWindowTitle("shadPS4 - Choose directory");
setWindowTitle(tr("shadPS4 - Choose directory"));
setWindowIcon(QIcon(":images/shadps4.ico"));
}
GameInstallDialog::~GameInstallDialog() {}
void GameInstallDialog::Browse() {
auto path = QFileDialog::getExistingDirectory(this, "Directory to install games");
auto path = QFileDialog::getExistingDirectory(this, tr("Directory to install games"));
if (!path.isEmpty()) {
m_gamesDirectory->setText(QDir::toNativeSeparators(path));
@ -36,7 +36,7 @@ void GameInstallDialog::Browse() {
}
QWidget* GameInstallDialog::SetupGamesDirectory() {
auto group = new QGroupBox("Directory to install games");
auto group = new QGroupBox(tr("Directory to install games"));
auto layout = new QHBoxLayout(group);
// Input.
@ -47,7 +47,7 @@ QWidget* GameInstallDialog::SetupGamesDirectory() {
layout->addWidget(m_gamesDirectory);
// Browse button.
auto browse = new QPushButton("Browse");
auto browse = new QPushButton(tr("Browse"));
connect(browse, &QPushButton::clicked, this, &GameInstallDialog::Browse);
@ -71,7 +71,7 @@ void GameInstallDialog::Save() {
if (gamesDirectory.isEmpty() || !QDir(gamesDirectory).exists() ||
!QDir::isAbsolutePath(gamesDirectory)) {
QMessageBox::critical(this, "Error",
QMessageBox::critical(this, tr("Error"),
"The value for location to install games is not valid.");
return;
}

View File

@ -4,7 +4,7 @@
#pragma once
struct GameInfo {
std::string path; // root path of game directory (normaly directory that contains eboot.bin)
std::string path; // root path of game directory (normally directory that contains eboot.bin)
std::string icon_path; // path of icon0.png
std::string pic_path; // path of pic1.png
QImage icon;

View File

@ -10,6 +10,7 @@
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include "cheats_patches.h"
#include "game_info.h"
#include "trophy_viewer.h"
@ -20,6 +21,7 @@
#include <shlguid.h>
#include <shobjidl.h>
#endif
#include "common/path_util.h"
class GuiContextMenus : public QObject {
Q_OBJECT
@ -34,23 +36,30 @@ public:
itemID = widget->currentRow() * widget->columnCount() + widget->currentColumn();
}
// Do not show the menu if an item is selected
if (itemID == -1) {
return;
}
// Setup menu.
QMenu menu(widget);
QAction createShortcut("Create Shortcut", widget);
QAction openFolder("Open Game Folder", widget);
QAction openSfoViewer("SFO Viewer", widget);
QAction openTrophyViewer("Trophy Viewer", widget);
QAction createShortcut(tr("Create Shortcut"), widget);
QAction openFolder(tr("Open Game Folder"), widget);
QAction openCheats(tr("Cheats / Patches"), widget);
QAction openSfoViewer(tr("SFO Viewer"), widget);
QAction openTrophyViewer(tr("Trophy Viewer"), widget);
menu.addAction(&openFolder);
menu.addAction(&createShortcut);
menu.addAction(&openCheats);
menu.addAction(&openSfoViewer);
menu.addAction(&openTrophyViewer);
// "Copy" submenu.
QMenu* copyMenu = new QMenu("Copy info", widget);
QAction* copyName = new QAction("Copy Name", widget);
QAction* copySerial = new QAction("Copy Serial", widget);
QAction* copyNameAll = new QAction("Copy All", widget);
QMenu* copyMenu = new QMenu(tr("Copy info"), widget);
QAction* copyName = new QAction(tr("Copy Name"), widget);
QAction* copySerial = new QAction(tr("Copy Serial"), widget);
QAction* copyNameAll = new QAction(tr("Copy All"), widget);
copyMenu->addAction(copyName);
copyMenu->addAction(copySerial);
@ -116,11 +125,24 @@ public:
tableWidget->horizontalHeader()->setVisible(false);
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
tableWidget->setWindowTitle("SFO Viewer");
tableWidget->setWindowTitle(tr("SFO Viewer"));
tableWidget->show();
}
}
if (selected == &openCheats) {
QString gameName = QString::fromStdString(m_games[itemID].name);
QString gameSerial = QString::fromStdString(m_games[itemID].serial);
QString gameVersion = QString::fromStdString(m_games[itemID].version);
QString gameSize = QString::fromStdString(m_games[itemID].size);
QPixmap gameImage(QString::fromStdString(m_games[itemID].icon_path));
CheatsPatches* cheatsPatches =
new CheatsPatches(gameName, gameSerial, gameVersion, gameSize, gameImage);
cheatsPatches->show();
connect(widget->parent(), &QWidget::destroyed, cheatsPatches,
[widget, cheatsPatches]() { cheatsPatches->deleteLater(); });
}
if (selected == &openTrophyViewer) {
QString trophyPath = QString::fromStdString(m_games[itemID].serial);
QString gameTrpPath = QString::fromStdString(m_games[itemID].path);
@ -170,15 +192,15 @@ public:
if (createShortcutLinux(linkPath, ebootPath, iconPath)) {
#endif
QMessageBox::information(
nullptr, "Shortcut creation",
QString("Shortcut created successfully!\n %1").arg(linkPath));
nullptr, tr("Shortcut creation"),
QString(tr("Shortcut created successfully!\n %1")).arg(linkPath));
} else {
QMessageBox::critical(
nullptr, "Error",
QString("Error creating shortcut!\n %1").arg(linkPath));
nullptr, tr("Error"),
QString(tr("Error creating shortcut!\n %1")).arg(linkPath));
}
} else {
QMessageBox::critical(nullptr, "Error", "Failed to convert icon.");
QMessageBox::critical(nullptr, tr("Error"), tr("Failed to convert icon."));
}
} else {
// If the icon is already in ICO format, we just create the shortcut
@ -188,11 +210,12 @@ public:
if (createShortcutLinux(linkPath, ebootPath, iconPath)) {
#endif
QMessageBox::information(
nullptr, "Shortcut creation",
QString("Shortcut created successfully!\n %1").arg(linkPath));
nullptr, tr("Shortcut creation"),
QString(tr("Shortcut created successfully!\n %1")).arg(linkPath));
} else {
QMessageBox::critical(nullptr, "Error",
QString("Error creating shortcut!\n %1").arg(linkPath));
QMessageBox::critical(
nullptr, tr("Error"),
QString(tr("Error creating shortcut!\n %1")).arg(linkPath));
}
}
}
@ -249,7 +272,7 @@ public:
int itemIndex = GetRowIndex(treeWidget, currentItem); // row
QMenu menu(treeWidget);
QAction installPackage("Install PKG", treeWidget);
QAction installPackage(tr("Install PKG"), treeWidget);
menu.addAction(&installPackage);

View File

@ -5,6 +5,7 @@
#include <QProgressDialog>
#include "about_dialog.h"
#include "cheats_patches.h"
#include "common/io_file.h"
#include "common/version.h"
#include "core/file_format/pkg.h"
@ -37,6 +38,7 @@ bool MainWindow::Init() {
SetLastUsedTheme();
SetLastIconSizeBullet();
GetPhysicalDevices();
LoadTranslation();
// show ui
setMinimumSize(350, minimumSizeHint().height());
setWindowTitle(QString::fromStdString("shadPS4 v" + std::string(Common::VERSION)));
@ -115,7 +117,7 @@ void MainWindow::CreateDockWindows() {
m_elf_viewer->hide();
m_game_list_frame->show();
m_dock_widget->setWidget(m_game_list_frame.data());
slider_pos = Config::getSliderPositon();
slider_pos = Config::getSliderPosition();
ui->sizeSlider->setSliderPosition(slider_pos); // set slider pos at start;
isTableList = true;
} else if (table_mode == 1) { // Grid
@ -123,7 +125,7 @@ void MainWindow::CreateDockWindows() {
m_elf_viewer->hide();
m_game_grid_frame->show();
m_dock_widget->setWidget(m_game_grid_frame.data());
slider_pos = Config::getSliderPositonGrid();
slider_pos = Config::getSliderPositionGrid();
ui->sizeSlider->setSliderPosition(slider_pos); // set slider pos at start;
isTableList = false;
} else {
@ -163,7 +165,7 @@ void MainWindow::GetPhysicalDevices() {
auto prop = physical_device.getProperties();
QString name = QString::fromUtf8(prop.deviceName, -1);
if (prop.apiVersion < Vulkan::TargetVulkanApiVersion) {
name += " * Unsupported Vulkan Version";
name += tr(" * Unsupported Vulkan Version");
}
m_physical_devices.push_back(name);
}
@ -183,12 +185,12 @@ void MainWindow::CreateConnects() {
36 + value; // 36 is the minimum icon size to use due to text disappearing.
m_game_list_frame->ResizeIcons(36 + value);
Config::setIconSize(36 + value);
Config::setSliderPositon(value);
Config::setSliderPosition(value);
} else {
m_game_grid_frame->icon_size = 69 + value;
m_game_grid_frame->PopulateGameGrid(m_game_info->m_games, false);
Config::setIconSizeGrid(69 + value);
Config::setSliderPositonGrid(value);
Config::setSliderPositionGrid(value);
}
});
@ -200,11 +202,19 @@ void MainWindow::CreateConnects() {
connect(ui->configureAct, &QAction::triggered, this, [this]() {
auto settingsDialog = new SettingsDialog(m_physical_devices, this);
connect(settingsDialog, &SettingsDialog::LanguageChanged, this,
&MainWindow::OnLanguageChanged);
settingsDialog->exec();
});
connect(ui->settingsButton, &QPushButton::clicked, this, [this]() {
auto settingsDialog = new SettingsDialog(m_physical_devices, this);
connect(settingsDialog, &SettingsDialog::LanguageChanged, this,
&MainWindow::OnLanguageChanged);
settingsDialog->exec();
});
@ -219,11 +229,11 @@ void MainWindow::CreateConnects() {
36; // 36 is the minimum icon size to use due to text disappearing.
ui->sizeSlider->setValue(0); // icone_size - 36
Config::setIconSize(36);
Config::setSliderPositon(0);
Config::setSliderPosition(0);
} else {
ui->sizeSlider->setValue(0); // icone_size - 36
Config::setIconSizeGrid(69);
Config::setSliderPositonGrid(0);
Config::setSliderPositionGrid(0);
}
});
@ -232,11 +242,11 @@ void MainWindow::CreateConnects() {
m_game_list_frame->icon_size = 64;
ui->sizeSlider->setValue(28);
Config::setIconSize(64);
Config::setSliderPositon(28);
Config::setSliderPosition(28);
} else {
ui->sizeSlider->setValue(28);
Config::setIconSizeGrid(97);
Config::setSliderPositonGrid(28);
Config::setSliderPositionGrid(28);
}
});
@ -245,11 +255,11 @@ void MainWindow::CreateConnects() {
m_game_list_frame->icon_size = 128;
ui->sizeSlider->setValue(92);
Config::setIconSize(128);
Config::setSliderPositon(92);
Config::setSliderPosition(92);
} else {
ui->sizeSlider->setValue(92);
Config::setIconSizeGrid(160);
Config::setSliderPositonGrid(91);
Config::setSliderPositionGrid(91);
}
});
@ -258,11 +268,11 @@ void MainWindow::CreateConnects() {
m_game_list_frame->icon_size = 256;
ui->sizeSlider->setValue(220);
Config::setIconSize(256);
Config::setSliderPositon(220);
Config::setSliderPosition(220);
} else {
ui->sizeSlider->setValue(220);
Config::setIconSizeGrid(256);
Config::setSliderPositonGrid(220);
Config::setSliderPositionGrid(220);
}
});
// List
@ -277,7 +287,7 @@ void MainWindow::CreateConnects() {
}
isTableList = true;
Config::setTableMode(0);
int slider_pos = Config::getSliderPositon();
int slider_pos = Config::getSliderPosition();
ui->sizeSlider->setEnabled(true);
ui->sizeSlider->setSliderPosition(slider_pos);
});
@ -293,7 +303,7 @@ void MainWindow::CreateConnects() {
}
isTableList = false;
Config::setTableMode(1);
int slider_pos_grid = Config::getSliderPositonGrid();
int slider_pos_grid = Config::getSliderPositionGrid();
ui->sizeSlider->setEnabled(true);
ui->sizeSlider->setSliderPosition(slider_pos_grid);
});
@ -308,6 +318,83 @@ void MainWindow::CreateConnects() {
Config::setTableMode(2);
});
// Cheats/Patches Download.
connect(ui->downloadCheatsPatchesAct, &QAction::triggered, this, [this]() {
QDialog* panelDialog = new QDialog(this);
QVBoxLayout* layout = new QVBoxLayout(panelDialog);
QPushButton* downloadAllCheatsButton =
new QPushButton(tr("Download Cheats For All Installed Games"), panelDialog);
QPushButton* downloadAllPatchesButton =
new QPushButton(tr("Download Patches For All Games"), panelDialog);
layout->addWidget(downloadAllCheatsButton);
layout->addWidget(downloadAllPatchesButton);
panelDialog->setLayout(layout);
connect(downloadAllCheatsButton, &QPushButton::clicked, this, [this, panelDialog]() {
QEventLoop eventLoop;
int pendingDownloads = 0;
auto onDownloadFinished = [&]() {
if (--pendingDownloads <= 0) {
eventLoop.quit();
}
};
for (const GameInfo& game : m_game_info->m_games) {
QString empty = "";
QString gameSerial = QString::fromStdString(game.serial);
QString gameVersion = QString::fromStdString(game.version);
CheatsPatches* cheatsPatches =
new CheatsPatches(empty, empty, empty, empty, empty, nullptr);
connect(cheatsPatches, &CheatsPatches::downloadFinished, onDownloadFinished);
pendingDownloads += 3;
cheatsPatches->downloadCheats("wolf2022", gameSerial, gameVersion, false);
cheatsPatches->downloadCheats("GoldHEN", gameSerial, gameVersion, false);
cheatsPatches->downloadCheats("shadPS4", gameSerial, gameVersion, false);
}
eventLoop.exec();
QMessageBox::information(
nullptr, tr("Download Complete"),
tr("You have downloaded cheats for all the games you have installed."));
panelDialog->accept();
});
connect(downloadAllPatchesButton, &QPushButton::clicked, this, [this, panelDialog]() {
QEventLoop eventLoop;
int pendingDownloads = 0;
auto onDownloadFinished = [&]() {
if (--pendingDownloads <= 0) {
eventLoop.quit();
}
};
QString empty = "";
CheatsPatches* cheatsPatches =
new CheatsPatches(empty, empty, empty, empty, empty, nullptr);
connect(cheatsPatches, &CheatsPatches::downloadFinished, onDownloadFinished);
pendingDownloads += 2;
cheatsPatches->downloadPatches("GoldHEN", false);
cheatsPatches->downloadPatches("shadPS4", false);
eventLoop.exec();
QMessageBox::information(
nullptr, tr("Download Complete"),
QString(tr("Patches Downloaded Successfully!") + "\n" +
tr("All Patches available for all games have been downloaded.")));
panelDialog->accept();
});
panelDialog->exec();
});
// Dump game list.
connect(ui->dumpGameListAct, &QAction::triggered, this, [&] {
QString filePath = qApp->applicationDirPath().append("/GameList.txt");
@ -459,7 +546,7 @@ void MainWindow::RefreshGameTable() {
m_game_grid_frame->PopulateGameGrid(m_game_info->m_games, false);
statusBar->clearMessage();
int numGames = m_game_info->m_games.size();
QString statusMessage = "Games: " + QString::number(numGames);
QString statusMessage = tr("Games: ") + QString::number(numGames);
statusBar->showMessage(statusMessage);
}
@ -510,7 +597,8 @@ void MainWindow::BootGame() {
int nFiles = fileNames.size();
if (nFiles > 1) {
QMessageBox::critical(nullptr, "Game Boot", QString("Only one file can be selected!"));
QMessageBox::critical(nullptr, tr("Game Boot"),
QString(tr("Only one file can be selected!")));
} else {
std::filesystem::path path(fileNames[0].toStdString());
#ifdef _WIN64
@ -533,7 +621,7 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
QDir game_dir(QString::fromStdString(extract_path.string()));
if (game_dir.exists()) {
QMessageBox msgBox;
msgBox.setWindowTitle("PKG Extraction");
msgBox.setWindowTitle(tr("PKG Extraction"));
if (pkgType.contains("PATCH")) {
psf.open("", pkg.sfo);
QString pkg_app_version = QString::fromStdString(psf.GetString("APP_VER"));
@ -542,22 +630,23 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
double appD = game_app_version.toDouble();
double pkgD = pkg_app_version.toDouble();
if (pkgD == appD) {
msgBox.setText(
QString("Patch detected!\nPKG and Game versions match!: %1\nWould you like "
"to overwrite?")
msgBox.setText(QString(tr("Patch detected!\nPKG and Game versions match!: "
"%1\nWould you like ") +
tr("to overwrite?"))
.arg(pkg_app_version));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
} else if (pkgD < appD) {
msgBox.setText(QString("Patch detected!\nPKG Version %1 is older "
"than installed version!: %2\nWould you like "
"to overwrite?")
msgBox.setText(QString(tr("Patch detected!\nPKG Version %1 is older ") +
tr("than installed version!: %2\nWould you like ") +
tr("to overwrite?"))
.arg(pkg_app_version, game_app_version));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
} else {
msgBox.setText(QString("Patch detected!\nGame is installed: %1\nWould you like "
"to install Patch: %2?")
msgBox.setText(
QString(tr("Patch detected!\nGame is installed: %1\nWould you like ") +
tr("to install Patch: %2?"))
.arg(game_app_version, pkg_app_version));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
@ -569,7 +658,8 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
return;
}
} else {
msgBox.setText(QString("Game already installed\n%1\nWould you like to overwrite?")
msgBox.setText(
QString(tr("Game already installed\n%1\nWould you like to overwrite?"))
.arg(QString::fromStdString(extract_path.string())));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
@ -583,15 +673,15 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
} else {
// Do nothing;
if (pkgType.contains("PATCH")) {
QMessageBox::information(this, "PKG Extraction",
"PKG is a patch, please install the game first!");
QMessageBox::information(this, tr("PKG Extraction"),
tr("PKG is a patch, please install the game first!"));
return;
}
// what else?
}
if (!pkg.Extract(file, extract_path, failreason)) {
QMessageBox::critical(this, "PKG ERROR", QString::fromStdString(failreason));
QMessageBox::critical(this, tr("PKG ERROR"), QString::fromStdString(failreason));
} else {
int nfiles = pkg.GetNumberOfFiles();
@ -601,9 +691,9 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
}
QProgressDialog dialog;
dialog.setWindowTitle("PKG Extraction");
dialog.setWindowTitle(tr("PKG Extraction"));
dialog.setWindowModality(Qt::WindowModal);
QString extractmsg = QString("Extracting PKG %1/%2").arg(pkgNum).arg(nPkg);
QString extractmsg = QString(tr("Extracting PKG %1/%2")).arg(pkgNum).arg(nPkg);
dialog.setLabelText(extractmsg);
dialog.setAutoClose(true);
dialog.setRange(0, nfiles);
@ -613,8 +703,9 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
if (pkgNum == nPkg) {
QString path = QString::fromStdString(Config::getGameInstallDir());
QMessageBox extractMsgBox(this);
extractMsgBox.setWindowTitle("Extraction Finished");
extractMsgBox.setText(QString("Game successfully installed at %1").arg(path));
extractMsgBox.setWindowTitle(tr("Extraction Finished"));
extractMsgBox.setText(
QString(tr("Game successfully installed at %1")).arg(path));
extractMsgBox.addButton(QMessageBox::Ok);
extractMsgBox.setDefaultButton(QMessageBox::Ok);
connect(&extractMsgBox, &QMessageBox::buttonClicked, this,
@ -635,7 +726,8 @@ void MainWindow::InstallDragDropPkg(std::filesystem::path file, int pkgNum, int
dialog.exec();
}
} else {
QMessageBox::critical(this, "PKG ERROR", "File doesn't appear to be a valid PKG file");
QMessageBox::critical(this, tr("PKG ERROR"),
tr("File doesn't appear to be a valid PKG file"));
}
}
@ -781,3 +873,35 @@ void MainWindow::CreateRecentGameActions() {
emulator.Run(gamePath.toUtf8().constData());
});
}
void MainWindow::LoadTranslation() {
auto language = QString::fromStdString(Config::getEmulatorLanguage());
const QString base_dir = QStringLiteral(":/translations");
QString base_path = QStringLiteral("%1/%2.qm").arg(base_dir).arg(language);
if (QFile::exists(base_path)) {
if (translator != nullptr) {
qApp->removeTranslator(translator);
}
translator = new QTranslator(qApp);
if (!translator->load(base_path)) {
QMessageBox::warning(
nullptr, QStringLiteral("Translation Error"),
QStringLiteral("Failed to find load translation file for '%1':\n%2")
.arg(language)
.arg(base_path));
delete translator;
} else {
qApp->installTranslator(translator);
ui->retranslateUi(this);
}
}
}
void MainWindow::OnLanguageChanged(const std::string& locale) {
Config::setEmulatorLanguage(locale);
LoadTranslation();
}

View File

@ -5,6 +5,7 @@
#include <QActionGroup>
#include <QDragEnterEvent>
#include <QTranslator>
#include "common/config.h"
#include "common/path_util.h"
@ -43,6 +44,7 @@ private Q_SLOTS:
void ShowGameList();
void RefreshGameTable();
void HandleResize(QResizeEvent* event);
void OnLanguageChanged(const std::string& locale);
private:
Ui_MainWindow* ui;
@ -59,6 +61,7 @@ private:
void InstallPkg();
void BootGame();
void AddRecentFiles(QString filePath);
void LoadTranslation();
QIcon RecolorIcon(const QIcon& icon, bool isWhite);
bool isIconBlack = false;
bool isTableList = true;
@ -84,6 +87,8 @@ private:
std::shared_ptr<GameInfoClass> m_game_info = std::make_shared<GameInfoClass>();
QTranslator* translator;
protected:
void dragEnterEvent(QDragEnterEvent* event1) override {
if (event1->mimeData()->hasUrls()) {

View File

@ -25,6 +25,7 @@ public:
QAction* setlistModeGridAct;
QAction* setlistElfAct;
QAction* gameInstallPathAct;
QAction* downloadCheatsPatchesAct;
QAction* dumpGameListAct;
QAction* pkgViewerAct;
QAction* aboutAct;
@ -120,11 +121,12 @@ public:
gameInstallPathAct = new QAction(MainWindow);
gameInstallPathAct->setObjectName("gameInstallPathAct");
gameInstallPathAct->setIcon(QIcon(":images/folder_icon.png"));
downloadCheatsPatchesAct = new QAction(MainWindow);
downloadCheatsPatchesAct->setObjectName("downloadCheatsPatchesAct");
dumpGameListAct = new QAction(MainWindow);
dumpGameListAct->setObjectName("dumpGameList");
pkgViewerAct = new QAction(MainWindow);
pkgViewerAct->setObjectName("pkgViewer");
pkgViewerAct->setObjectName("pkgViewer");
pkgViewerAct->setIcon(QIcon(":images/file_icon.png"));
aboutAct = new QAction(MainWindow);
aboutAct->setObjectName("aboutAct");
@ -277,6 +279,7 @@ public:
menuSettings->addAction(configureAct);
menuSettings->addAction(gameInstallPathAct);
menuSettings->addAction(menuUtils->menuAction());
menuUtils->addAction(downloadCheatsPatchesAct);
menuUtils->addAction(dumpGameListAct);
menuUtils->addAction(pkgViewerAct);
menuAbout->addAction(aboutAct);
@ -323,6 +326,8 @@ public:
setlistElfAct->setText(QCoreApplication::translate("MainWindow", "Elf Viewer", nullptr));
gameInstallPathAct->setText(
QCoreApplication::translate("MainWindow", "Game Install Directory", nullptr));
downloadCheatsPatchesAct->setText(
QCoreApplication::translate("MainWindow", "Download Cheats/Patches", nullptr));
dumpGameListAct->setText(
QCoreApplication::translate("MainWindow", "Dump Game List", nullptr));
pkgViewerAct->setText(QCoreApplication::translate("MainWindow", "PKG Viewer", nullptr));

View File

@ -0,0 +1,347 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <algorithm>
#include <string>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QListView>
#include <QMessageBox>
#include <QXmlStreamReader>
#include "common/logging/log.h"
#include "common/path_util.h"
#include "memory_patcher.h"
namespace MemoryPatcher {
uintptr_t g_eboot_address;
u64 g_eboot_image_size;
std::string g_game_serial;
std::vector<patchInfo> pending_patches;
QString toHex(unsigned long long value, size_t byteSize) {
std::stringstream ss;
ss << std::hex << std::setfill('0') << std::setw(byteSize * 2) << value;
return QString::fromStdString(ss.str());
}
QString convertValueToHex(const QString& type, const QString& valueStr) {
QString result;
std::string typeStr = type.toStdString();
std::string valueStrStd = valueStr.toStdString();
if (typeStr == "byte") {
unsigned int value = std::stoul(valueStrStd, nullptr, 16);
result = toHex(value, 1);
} else if (typeStr == "bytes16") {
unsigned int value = std::stoul(valueStrStd, nullptr, 16);
result = toHex(value, 2);
} else if (typeStr == "bytes32") {
unsigned long value = std::stoul(valueStrStd, nullptr, 16);
result = toHex(value, 4);
} else if (typeStr == "bytes64") {
unsigned long long value = std::stoull(valueStrStd, nullptr, 16);
result = toHex(value, 8);
} else if (typeStr == "float32") {
union {
float f;
uint32_t i;
} floatUnion;
floatUnion.f = std::stof(valueStrStd);
result = toHex(floatUnion.i, sizeof(floatUnion.i));
} else if (typeStr == "float64") {
union {
double d;
uint64_t i;
} doubleUnion;
doubleUnion.d = std::stod(valueStrStd);
result = toHex(doubleUnion.i, sizeof(doubleUnion.i));
} else if (typeStr == "utf8") {
QByteArray byteArray = QString::fromStdString(valueStrStd).toUtf8();
byteArray.append('\0');
std::stringstream ss;
for (unsigned char c : byteArray) {
ss << std::hex << std::setfill('0') << std::setw(2) << static_cast<int>(c);
}
result = QString::fromStdString(ss.str());
} else if (typeStr == "utf16") {
QByteArray byteArray(
reinterpret_cast<const char*>(QString::fromStdString(valueStrStd).utf16()),
QString::fromStdString(valueStrStd).size() * 2);
byteArray.append('\0');
byteArray.append('\0');
std::stringstream ss;
for (unsigned char c : byteArray) {
ss << std::hex << std::setfill('0') << std::setw(2) << static_cast<int>(c);
}
result = QString::fromStdString(ss.str());
} else if (typeStr == "bytes") {
result = valueStr;
} else if (typeStr == "mask" || typeStr == "mask_jump32") {
result = valueStr;
} else {
LOG_INFO(Loader, "Error applying Patch, unknown type: {}", typeStr);
}
return result;
}
void OnGameLoaded() {
// We use the QT headers for the xml and json parsing, this define is only true on QT builds
QString patchDir =
QString::fromStdString(Common::FS::GetUserPath(Common::FS::PathType::PatchesDir).string());
QString repositories[] = {"GoldHEN", "shadPS4"};
for (const QString& repository : repositories) {
QString filesJsonPath = patchDir + "/" + repository + "/files.json";
QFile jsonFile(filesJsonPath);
if (!jsonFile.open(QIODevice::ReadOnly)) {
LOG_ERROR(Loader, "Unable to open files.json for reading.");
continue;
}
QByteArray jsonData = jsonFile.readAll();
jsonFile.close();
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
QJsonObject jsonObject = jsonDoc.object();
QString selectedFileName;
QString serial = QString::fromStdString(g_game_serial);
for (auto it = jsonObject.constBegin(); it != jsonObject.constEnd(); ++it) {
QString filePath = it.key();
QJsonArray idsArray = it.value().toArray();
if (idsArray.contains(QJsonValue(serial))) {
selectedFileName = filePath;
break;
}
}
if (selectedFileName.isEmpty()) {
LOG_ERROR(Loader, "No patch file found for the current serial.");
continue;
}
QString filePath = patchDir + "/" + repository + "/" + selectedFileName;
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
LOG_ERROR(Loader, "Unable to open the file for reading.");
continue;
}
QByteArray xmlData = file.readAll();
file.close();
QString newXmlData;
QXmlStreamReader xmlReader(xmlData);
bool insideMetadata = false;
bool isEnabled = false;
std::string currentPatchName;
while (!xmlReader.atEnd()) {
xmlReader.readNext();
if (xmlReader.isStartElement()) {
QJsonArray patchLines;
if (xmlReader.name() == QStringLiteral("Metadata")) {
insideMetadata = true;
QString name = xmlReader.attributes().value("Name").toString();
currentPatchName = name.toStdString();
// Check and update the isEnabled attribute
for (const QXmlStreamAttribute& attr : xmlReader.attributes()) {
if (attr.name() == QStringLiteral("isEnabled")) {
if (attr.value().toString() == "true") {
isEnabled = true;
} else
isEnabled = false;
}
}
} else if (xmlReader.name() == QStringLiteral("PatchList")) {
QJsonArray linesArray;
while (!xmlReader.atEnd() &&
!(xmlReader.tokenType() == QXmlStreamReader::EndElement &&
xmlReader.name() == QStringLiteral("PatchList"))) {
xmlReader.readNext();
if (xmlReader.tokenType() == QXmlStreamReader::StartElement &&
xmlReader.name() == QStringLiteral("Line")) {
QXmlStreamAttributes attributes = xmlReader.attributes();
QJsonObject lineObject;
lineObject["Type"] = attributes.value("Type").toString();
lineObject["Address"] = attributes.value("Address").toString();
lineObject["Value"] = attributes.value("Value").toString();
linesArray.append(lineObject);
}
}
patchLines = linesArray;
if (isEnabled) {
foreach (const QJsonValue& value, patchLines) {
QJsonObject lineObject = value.toObject();
QString type = lineObject["Type"].toString();
QString address = lineObject["Address"].toString();
QString patchValue = lineObject["Value"].toString();
QString maskOffsetStr = lineObject["Offset"].toString();
patchValue = convertValueToHex(type, patchValue);
bool littleEndian = false;
if (type == "bytes16") {
littleEndian = true;
} else if (type == "bytes32") {
littleEndian = true;
} else if (type == "bytes64") {
littleEndian = true;
}
MemoryPatcher::PatchMask patchMask = MemoryPatcher::PatchMask::None;
int maskOffsetValue = 0;
if (type == "mask") {
patchMask = MemoryPatcher::PatchMask::Mask;
// im not sure if this works, there is no games to test the mask
// offset on yet
if (!maskOffsetStr.toStdString().empty())
maskOffsetValue = std::stoi(maskOffsetStr.toStdString(), 0, 10);
}
if (type == "mask_jump32")
patchMask = MemoryPatcher::PatchMask::Mask_Jump32;
MemoryPatcher::PatchMemory(currentPatchName, address.toStdString(),
patchValue.toStdString(), false,
littleEndian, patchMask);
}
}
}
}
}
if (xmlReader.hasError()) {
LOG_ERROR(Loader, "Failed to parse XML for {}", g_game_serial);
} else {
LOG_INFO(Loader, "Patches loaded successfully");
}
ApplyPendingPatches();
}
}
void AddPatchToQueue(patchInfo patchToAdd) {
pending_patches.push_back(patchToAdd);
}
void ApplyPendingPatches() {
for (size_t i = 0; i < pending_patches.size(); ++i) {
patchInfo currentPatch = pending_patches[i];
if (currentPatch.gameSerial != g_game_serial)
continue;
PatchMemory(currentPatch.modNameStr, currentPatch.offsetStr, currentPatch.valueStr,
currentPatch.isOffset, currentPatch.littleEndian, currentPatch.patchMask,
currentPatch.maskOffset);
}
pending_patches.clear();
}
void PatchMemory(std::string modNameStr, std::string offsetStr, std::string valueStr, bool isOffset,
bool littleEndian, PatchMask patchMask, int maskOffset) {
// Send a request to modify the process memory.
void* cheatAddress = nullptr;
if (patchMask == PatchMask::None) {
if (isOffset) {
cheatAddress = reinterpret_cast<void*>(g_eboot_address + std::stoi(offsetStr, 0, 16));
} else {
cheatAddress =
reinterpret_cast<void*>(g_eboot_address + (std::stoi(offsetStr, 0, 16) - 0x400000));
}
}
if (patchMask == PatchMask::Mask) {
cheatAddress = reinterpret_cast<void*>(PatternScan(offsetStr) + maskOffset);
}
// TODO: implement mask_jump32
if (cheatAddress == nullptr) {
LOG_ERROR(Loader, "Failed to get address for patch {}", modNameStr);
return;
}
std::vector<unsigned char> bytePatch;
for (size_t i = 0; i < valueStr.length(); i += 2) {
unsigned char byte =
static_cast<unsigned char>(std::strtol(valueStr.substr(i, 2).c_str(), nullptr, 16));
bytePatch.push_back(byte);
}
if (littleEndian) {
std::reverse(bytePatch.begin(), bytePatch.end());
}
std::memcpy(cheatAddress, bytePatch.data(), bytePatch.size());
LOG_INFO(Loader, "Applied patch: {}, Offset: {}, Value: {}", modNameStr,
(uintptr_t)cheatAddress, valueStr);
}
static std::vector<int32_t> PatternToByte(const std::string& pattern) {
std::vector<int32_t> bytes;
const char* start = pattern.data();
const char* end = start + pattern.size();
for (const char* current = start; current < end; ++current) {
if (*current == '?') {
++current;
if (*current == '?')
++current;
bytes.push_back(-1);
} else {
bytes.push_back(strtoul(current, const_cast<char**>(&current), 16));
}
}
return bytes;
}
uintptr_t PatternScan(const std::string& signature) {
std::vector<int32_t> patternBytes = PatternToByte(signature);
const auto scanBytes = static_cast<uint8_t*>((void*)g_eboot_address);
const int32_t* sigPtr = patternBytes.data();
const size_t sigSize = patternBytes.size();
uint32_t foundResults = 0;
for (uint32_t i = 0; i < g_eboot_image_size - sigSize; ++i) {
bool found = true;
for (uint32_t j = 0; j < sigSize; ++j) {
if (scanBytes[i + j] != sigPtr[j] && sigPtr[j] != -1) {
found = false;
break;
}
}
if (found) {
foundResults++;
return reinterpret_cast<uintptr_t>(&scanBytes[i]);
}
}
return 0;
}
} // namespace MemoryPatcher

View File

@ -0,0 +1,47 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <cstring>
#include <string>
#include <vector>
#include <QString>
namespace MemoryPatcher {
extern uintptr_t g_eboot_address;
extern u64 g_eboot_image_size;
extern std::string g_game_serial;
enum PatchMask : uint8_t {
None,
Mask,
Mask_Jump32,
};
struct patchInfo {
std::string gameSerial;
std::string modNameStr;
std::string offsetStr;
std::string valueStr;
bool isOffset;
bool littleEndian;
PatchMask patchMask;
int maskOffset;
};
extern std::vector<patchInfo> pending_patches;
QString convertValueToHex(const QString& type, const QString& valueStr);
void OnGameLoaded();
void AddPatchToQueue(patchInfo patchToAdd);
void ApplyPendingPatches();
void PatchMemory(std::string modNameStr, std::string offsetStr, std::string valueStr, bool isOffset,
bool littleEndian, PatchMask patchMask = PatchMask::None, int maskOffset = 0);
static std::vector<int32_t> PatternToByte(const std::string& pattern);
uintptr_t PatternScan(const std::string& signature);
} // namespace MemoryPatcher

View File

@ -2,7 +2,9 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include <QCompleter>
#include <QDirIterator>
#include "main_window.h"
#include "settings_dialog.h"
#include "ui_settings_dialog.h"
@ -60,6 +62,7 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
completer->setCaseSensitivity(Qt::CaseInsensitive);
ui->consoleLanguageComboBox->setCompleter(completer);
InitializeEmulatorLanguages();
LoadValuesFromConfig();
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QWidget::close);
@ -158,6 +161,7 @@ void SettingsDialog::LoadValuesFromConfig() {
languageIndexes.begin(),
std::find(languageIndexes.begin(), languageIndexes.end(), Config::GetLanguage())) %
languageIndexes.size());
ui->emulatorLanguageComboBox->setCurrentIndex(languages[Config::getEmulatorLanguage()]);
ui->graphicsAdapterBox->setCurrentIndex(Config::getGpuId() + 1);
ui->widthSpinBox->setValue(Config::getScreenWidth());
ui->heightSpinBox->setValue(Config::getScreenHeight());
@ -179,6 +183,35 @@ void SettingsDialog::LoadValuesFromConfig() {
ui->rdocCheckBox->setChecked(Config::isRdocEnabled());
}
void SettingsDialog::InitializeEmulatorLanguages() {
QDirIterator it(QStringLiteral(":/translations"), QDirIterator::NoIteratorFlags);
int idx = 0;
while (it.hasNext()) {
QString locale = it.next();
locale.truncate(locale.lastIndexOf(QLatin1Char{'.'}));
locale.remove(0, locale.lastIndexOf(QLatin1Char{'/'}) + 1);
const QString lang = QLocale::languageToString(QLocale(locale).language());
const QString country = QLocale::territoryToString(QLocale(locale).territory());
ui->emulatorLanguageComboBox->addItem(QStringLiteral("%1 (%2)").arg(lang, country), locale);
languages[locale.toStdString()] = idx;
idx++;
}
connect(ui->emulatorLanguageComboBox, qOverload<int>(&QComboBox::currentIndexChanged), this,
&SettingsDialog::OnLanguageChanged);
}
void SettingsDialog::OnLanguageChanged(int index) {
if (index == -1)
return;
ui->retranslateUi(this);
emit LanguageChanged(ui->emulatorLanguageComboBox->itemData(index).toString().toStdString());
}
int SettingsDialog::exec() {
return QDialog::exec();
}

View File

@ -22,8 +22,15 @@ public:
int exec() override;
signals:
void LanguageChanged(const std::string& locale);
private:
void LoadValuesFromConfig();
void InitializeEmulatorLanguages();
void OnLanguageChanged(int index);
std::unique_ptr<Ui::SettingsDialog> ui;
std::map<std::string, int> languages;
};

View File

@ -79,32 +79,6 @@
<string>System</string>
</property>
<layout class="QVBoxLayout" name="emuSettingsLayout">
<item>
<layout class="QVBoxLayout" name="vLayoutUserName">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="hLayoutUserName">
<item>
<widget class="QGroupBox" name="userName">
<property name="title">
<string>Username</string>
</property>
<layout class="QVBoxLayout" name="userNameLayout">
<item>
<widget class="QLineEdit" name="userNameLineEdit"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="consoleLanguageGroupBox">
<property name="title">
@ -117,6 +91,18 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="emulatorLanguageGroupBox">
<property name="title">
<string>Emulator Language</string>
</property>
<layout class="QVBoxLayout" name="langSettingsLayout">
<item>
<widget class="QComboBox" name="emulatorLanguageComboBox"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
@ -156,17 +142,30 @@
</layout>
</item>
<item>
<spacer name="emulatorSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
<layout class="QVBoxLayout" name="vLayoutUserName">
<property name="spacing">
<number>6</number>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
<property name="leftMargin">
<number>0</number>
</property>
</spacer>
<item>
<layout class="QHBoxLayout" name="hLayoutUserName">
<item>
<widget class="QGroupBox" name="userName">
<property name="title">
<string>Username</string>
</property>
<layout class="QVBoxLayout" name="userNameLayout">
<item>
<widget class="QLineEdit" name="userNameLineEdit"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="da_DK">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Trick / Patches</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Download Tricks / Patches</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Ikke understøttet Vulkan-version</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Hent snyd til alle installerede spil</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Hent patches til alle spil</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Download fuldført</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Du har hentet snyd til alle de spil, du har installeret.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patcher hentet med succes!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Alle patches til alle spil er blevet hentet.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Spil: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG-fil (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF-filer (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Spil-boot</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Kun én fil kan vælges!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG-udtrækning</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch opdaget!\nPKG- og spilversioner stemmer overens!: %1\nVil du </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>overskrive?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch opdaget!\nPKG-version %1 er ældre </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>end installeret version!: %2\nVil du </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>overskrive?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch opdaget!\nSpillet er installeret: %1\nVil du </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>installere patch: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Spil allerede installeret\n%1\nVil du overskrive?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG er en patch, venligst installer spillet først!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG FEJL</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Udvinding af PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Udvinding afsluttet</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Spillet blev installeret succesfuldt %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Filen ser ikke ud til at være en gyldig PKG-fil</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Snyd / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches er eksperimentelle.\nBrug med forsigtighed.\n\nDownload cheats individuelt ved at vælge lageret og klikke download-knappen.\nUnder fanen Patches kan du downloade alle patches én gang, vælge hvilke du vil bruge og gemme valget.\n\nDa vi ikke udvikler cheats/patches,\nvenligst rapporter problemer til cheat-udvikleren.\n\nHar du lavet en ny cheat? Besøg:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Ingen billede tilgængelig</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serienummer: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Version: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Størrelse: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Vælg snyd-fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repository:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Hent snyd</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Slet fil</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Ingen filer valgt.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Du kan slette de snyd, du ikke ønsker, efter at have hentet dem.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Ønsker du at slette den valgte fil?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Vælg patch-fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Hent patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Gem</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Snyd</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Fejl</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Ingen patch valgt.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Kan ikke åbne files.json til læsning.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Ingen patch-fil fundet for det nuværende serienummer.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Kan ikke åbne filen til læsning.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Kan ikke åbne filen til skrivning.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Kunne ikke analysere XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Succes</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Indstillinger gemt med succes.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Ugyldig kilde</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Den valgte kilde er ugyldig.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Fil findes</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Filen findes allerede. Vil du erstatte den?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Kunne ikke gemme fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Kunne ikke hente fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Snyd ikke fundet</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Ingen snyd fundet til dette spil i denne version af det valgte repository, prøv et andet repository eller en anden version af spillet.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Snyd hentet med succes</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Du har succesfuldt hentet snyd for denne version af spillet fra det valgte repository. Du kan prøve at hente fra et andet repository, hvis det er tilgængeligt, vil det også være muligt at bruge det ved at vælge filen fra listen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Kunne ikke gemme:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Kunne ikke hente:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Download fuldført</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patcher hentet med succes! Alle patches til alle spil er blevet hentet, der er ikke behov for at hente dem individuelt for hvert spil, som det sker med snyd.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Kunne ikke analysere JSON-data fra HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Kunne ikke hente HTML-side.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Kunne ikke åbne fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML FEJL:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Kunne ikke åbne files.json til skrivning</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Forfatter: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Mappe findes ikke:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Kunne ikke åbne files.json til læsning.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Navn:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="de">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Cheats / Patches herunterladen</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Nicht unterstützte Vulkan-Version</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Cheats für alle installierten Spiele herunterladen</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Patches für alle Spiele herunterladen</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Download abgeschlossen</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Sie haben Cheats für alle installierten Spiele heruntergeladen.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patches erfolgreich heruntergeladen!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Alle Patches für alle Spiele wurden heruntergeladen.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Spiele: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG-Datei (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF-Dateien (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Spiel-Start</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Es kann nur eine Datei ausgewählt werden!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG-Extraktion</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch erkannt!\nPKG- und Spielversion stimmen überein!: %1\nMöchten Sie </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>überschreiben?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch erkannt!\nPKG-Version %1 ist älter </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>als die installierte Version!: %2\nMöchten Sie </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>überschreiben?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch erkannt!\nSpiel ist installiert: %1\nMöchten Sie </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>Patch installieren: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Spiel bereits installiert\n%1\nMöchten Sie überschreiben?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG ist ein Patch, bitte installieren Sie zuerst das Spiel!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG-ERROR</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Extrahiere PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extraktion abgeschlossen</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Spiel erfolgreich installiert auf %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Die Datei scheint keine gültige PKG-Datei zu sein</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches sind experimentell.\nVerwenden Sie sie mit Vorsicht.\n\nLaden Sie Cheats einzeln herunter, indem Sie das Repository auswählen und auf die Download-Schaltfläche klicken.\nAuf der Registerkarte Patches können Sie alle Patches auf einmal herunterladen, auswählen, welche Sie verwenden möchten, und die Auswahl speichern.\n\nDa wir die Cheats/Patches nicht entwickeln,\nbitte melden Sie Probleme an den Cheat-Autor.\n\nHaben Sie einen neuen Cheat erstellt? Besuchen Sie:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Kein Bild verfügbar</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Seriennummer: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Version: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Größe: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Cheat-Datei auswählen:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repository:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Cheats herunterladen</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Datei löschen</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Keine Dateien ausgewählt.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Sie können die Cheats, die Sie nicht möchten, nach dem Herunterladen löschen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Wollen Sie die ausgewählte Datei löschen?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Patch-Datei auswählen:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Patches herunterladen</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Speichern</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Kein Patch ausgewählt.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Kann files.json nicht zum Lesen öffnen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Keine Patch-Datei für die aktuelle Seriennummer gefunden.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Kann die Datei nicht zum Lesen öffnen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Kann die Datei nicht zum Schreiben öffnen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Fehler beim Parsen von XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Erfolg</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Optionen erfolgreich gespeichert.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Ungültige Quelle</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Die ausgewählte Quelle ist ungültig.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Datei existiert</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Datei existiert bereits. Möchten Sie sie ersetzen?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Fehler beim Speichern der Datei:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Fehler beim Herunterladen der Datei:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheats nicht gefunden</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Keine Cheats für dieses Spiel in dieser Version des gewählten Repositories gefunden. Versuchen Sie es mit einem anderen Repository oder einer anderen Version des Spiels.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats erfolgreich heruntergeladen</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Sie haben erfolgreich Cheats für diese Version des Spiels aus dem gewählten Repository heruntergeladen. Sie können versuchen, von einem anderen Repository herunterzuladen. Wenn verfügbar, können Sie es auswählen, indem Sie die Datei aus der Liste auswählen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Speichern fehlgeschlagen:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Herunterladen fehlgeschlagen:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Download abgeschlossen</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patches erfolgreich heruntergeladen! Alle Patches für alle Spiele wurden heruntergeladen, es ist nicht notwendig, sie einzeln für jedes Spiel herunterzuladen, wie es bei Cheats der Fall ist.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Fehler beim Parsen der JSON-Daten aus HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Fehler beim Abrufen der HTML-Seite.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Fehler beim Öffnen der Datei:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML-Fehler:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Kann files.json nicht zum Schreiben öffnen</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Autor: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Verzeichnis existiert nicht:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Kann files.json nicht zum Lesen öffnen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Name:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="el">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Kodikí / Enimeróseis</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Κατεβάστε Κωδικούς / Ενημερώσεις</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Μη υποστηριζόμενη έκδοση Vulkan</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Λήψη Cheats για όλα τα εγκατεστημένα παιχνίδια</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Λήψη Patches για όλα τα παιχνίδια</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Η λήψη ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Έχετε κατεβάσει cheats για όλα τα εγκατεστημένα παιχνίδια.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Τα Patches κατέβηκαν επιτυχώς!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Όλα τα διαθέσιμα Patches για όλα τα παιχνίδια έχουν κατέβει.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Παιχνίδια: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Αρχείο PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Αρχεία ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Εκκίνηση παιχνιδιού</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Μπορεί να επιλεγεί μόνο ένα αρχείο!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Εξαγωγή PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Ανίχνευση Patch!\nΟι εκδόσεις PKG και παιχνιδιού ταιριάζουν!: %1\nΘέλετε </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>να αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Ανίχνευση Patch!\nΗ έκδοση PKG %1 είναι παλαιότερη </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>από την εγκατεστημένη έκδοση!: %2\nΘέλετε </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>να αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Ανίχνευση Patch!\nΤο παιχνίδι είναι εγκατεστημένο: %1\nΘέλετε </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>να εγκαταστήσετε το Patch: %2;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Το παιχνίδι είναι ήδη εγκατεστημένο\n%1\nΘέλετε να αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>Το PKG είναι patch, παρακαλώ εγκαταστήστε πρώτα το παιχνίδι!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>ΣΦΑΛΜΑ PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Εξαγωγή PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Η εξαγωγή ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Το παιχνίδι εγκαταστάθηκε επιτυχώς στο %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Η αρχείο δεν φαίνεται να είναι έγκυρο αρχείο PKG</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Οι cheats/patches είναι πειραματικά.\nΧρησιμοποιήστε τα με προσοχή.\n\nΚατεβάστε τους cheats μεμονωμένα επιλέγοντας το αποθετήριο και κάνοντας κλικ στο κουμπί λήψης.\nΣτην καρτέλα Patches, μπορείτε να κατεβάσετε όλα τα patches ταυτόχρονα, να επιλέξετε ποια θέλετε να χρησιμοποιήσετε και να αποθηκεύσετε την επιλογή.\n\nΔεδομένου ότι δεν αναπτύσσουμε τους cheats/patches,\αρακαλώ αναφέρετε προβλήματα στον δημιουργό του cheat.\n\nΔημιουργήσατε ένα νέο cheat; Επισκεφθείτε:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Δεν διατίθεται εικόνα</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Σειριακός αριθμός: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Έκδοση: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Μέγεθος: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Επιλέξτε αρχείο Cheat:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Αποθετήριο:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Λήψη Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Διαγραφή αρχείου</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Δεν έχουν επιλεγεί αρχεία.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Μπορείτε να διαγράψετε τα cheats που δεν θέλετε μετά τη λήψη τους.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Θέλετε να διαγράψετε το επιλεγμένο αρχείο;\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Επιλέξτε αρχείο Patch:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Λήψη Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Αποθήκευση</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Σφάλμα</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Δεν έχει επιλεγεί κανένα patch.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Αδυναμία ανοίγματος του files.json για ανάγνωση.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Δεν βρέθηκε αρχείο patch για τον τρέχοντα σειριακό αριθμό.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Αδυναμία ανοίγματος του αρχείου για ανάγνωση.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Αδυναμία ανοίγματος του αρχείου για εγγραφή.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Αποτυχία ανάλυσης XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Επιτυχία</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Οι ρυθμίσεις αποθηκεύτηκαν επιτυχώς.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Μη έγκυρη Πηγή</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Η επιλεγμένη πηγή είναι μη έγκυρη.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Η αρχείο υπάρχει</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Η αρχείο υπάρχει ήδη. Θέλετε να την αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Αποτυχία αποθήκευσης αρχείου:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Αποτυχία λήψης αρχείου:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Δεν βρέθηκαν Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Δεν βρέθηκαν cheats για αυτό το παιχνίδι στην τρέχουσα έκδοση του επιλεγμένου αποθετηρίου. Δοκιμάστε να κατεβάσετε από άλλο αποθετήριο ή άλλη έκδοση του παιχνιδιού.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats κατεβάστηκαν επιτυχώς</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Κατεβάσατε επιτυχώς cheats για αυτή την έκδοση του παιχνιδιού από το επιλεγμένο αποθετήριο. Μπορείτε να δοκιμάσετε να κατεβάσετε από άλλο αποθετήριο. Αν είναι διαθέσιμο, μπορείτε να το επιλέξετε επιλέγοντας το αρχείο από τη λίστα.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Αποτυχία αποθήκευσης:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Αποτυχία λήψης:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Η λήψη ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Τα Patches κατεβάστηκαν επιτυχώς! Όλα τα Patches για όλα τα παιχνίδια έχουν κατέβει, δεν είναι απαραίτητο να τα κατεβάσετε ένα-ένα για κάθε παιχνίδι, όπως με τα Cheats.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Αποτυχία ανάλυσης δεδομένων JSON από HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Αποτυχία ανάκτησης σελίδας HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Αποτυχία ανοίγματος αρχείου:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>ΣΦΑΛΜΑ XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Αποτυχία ανοίγματος του files.json για εγγραφή</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Συγγραφέας: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Ο φάκελος δεν υπάρχει:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Αποτυχία ανοίγματος του files.json για ανάγνωση.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Όνομα:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="en_US">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Download Cheats / Patches</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Unsupported Vulkan Version</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Download Cheats For All Installed Games</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Download Patches For All Games</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Download Complete</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>You have downloaded cheats for all the games you have installed.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patches Downloaded Successfully!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>All Patches available for all games have been downloaded.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Games: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG File (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF files (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Game Boot</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Only one file can be selected!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG Extraction</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch detected!\nPKG and Game versions match!: %1\nWould you like </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>to overwrite?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch detected!\nPKG Version %1 is older </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>than installed version!: %2\nWould you like </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>to overwrite?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch detected!\nGame is installed: %1\nWould you like </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>to install Patch: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Game already installed\n%1\nWould you like to overwrite?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG is a patch, please install the game first!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG ERROR</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Extracting PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extraction Finished</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Game successfully installed at %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>File doesn't appear to be a valid PKG file</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>No Image Available</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serial: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Version: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Size: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Select Cheat File:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repository:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Download Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Delete File</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>No files selected.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>You can delete the cheats you don't want after downloading them.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Do you want to delete the selected file?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Select Patch File:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Download Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Save</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>No patch selected.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Unable to open files.json for reading.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>No patch file found for the current serial.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Unable to open the file for reading.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Unable to open the file for writing.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Failed to parse XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Success</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Options saved successfully.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Invalid Source</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>The selected source is invalid.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>File Exists</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>File already exists. Do you want to replace it?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Failed to save file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Failed to download file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheats Not Found</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats Downloaded Successfully</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Failed to save:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Failed to download:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Download Complete</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patches Downloaded Successfully! All Patches available for all games have been downloaded, there is no need to download them individually for each game as happens in Cheats.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Failed to parse JSON data from HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Failed to retrieve HTML page.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Failed to open file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML ERROR:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Failed to open files.json for writing</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Author: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Directory does not exist:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Failed to open files.json for reading.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Name:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="es_ES">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>Acerca de shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 es un emulador experimental de código abierto para la PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>Este software no debe utilizarse para jugar juegos que no hayas obtenido legalmente.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Abrir carpeta</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Cargando lista de juegos, por favor espera :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Cargando...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Elegir carpeta</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Carpeta para instalar juegos</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Buscar</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>El valor para la ubicación de instalación de los juegos no es válido.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Crear acceso directo</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Abrir carpeta del juego</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Trucos / Parches</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>Vista SFO</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Ver trofeos</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copiar información</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copiar nombre</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copiar serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copiar todo</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Acceso directo creado</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>¡Acceso directo creado con éxito!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>¡Error al crear el acceso directo!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Instalar PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Abrir/Agregar carpeta Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Instalar paquetes (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Iniciar juego</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>Acerca de shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configurar...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Instalar aplicación desde un archivo .pkg</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Juegos recientes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Salir</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Salir de shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Salir de la aplicación.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Mostrar lista de juegos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Actualizar lista de juegos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Muy pequeño</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Pequeño</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Mediano</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Grande</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Vista de lista</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Vista de cuadrícula</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Vista Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Carpeta de instalación de los juegos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Descargar Trucos / Parches</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Volcar lista de juegos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>Vista PKG</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Buscar...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>Archivo</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Vista</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Iconos de los juegos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Tipo de lista</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Configuraciones</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utilidades</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Temas</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>Ayuda</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Oscuro</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Claro</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Verde</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Azul</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violeta</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>barra de herramientas</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Abrir carpeta</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Vista de trofeos</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Configuraciones</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>Sistema</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Idioma de la consola</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Idioma del emulador</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulador</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Habilitar pantalla completa</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Mostrar splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Modo PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Nombre de usuario</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Registro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Tipo de registro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Filtro de registro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Gráficos</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Dispositivo gráfico</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Ancho</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Alto</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Divisor de Vblank</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Avanzado</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Habilitar volcado de shaders</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Habilitar GPU NULL</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Habilitar volcado de PM4</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Depuración</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Habilitar volcado de depuración</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Habilitar capas de validación de Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Habilitar validación de sincronización de Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Habilitar depuración de RenderDoc</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Versión de Vulkan no soportada</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Descargar trucos para todos los juegos instalados</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Descargar parches para todos los juegos</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Descarga completa</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Has descargado trucos para todos los juegos que tienes instalados.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>¡Parches descargados exitosamente!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Todos los parches disponibles para todos los juegos han sido descargados.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Juegos: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Archivo PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Archivos ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Inicio del juego</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>¡Solo se puede seleccionar un archivo!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Extracción de PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>¡Parche detectado!\n¡La versión de PKG y del juego coinciden!: %1\n¿Te gustaría </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>¿sobrescribir?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>¡Parche detectado!\nLa versión de PKG %1 es más antigua </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>que la versión instalada!: %2\n¿Te gustaría </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>¿sobrescribir?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>¡Parche detectado!\nJuego está instalado: %1\n¿Te gustaría </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>¿instalar el parche: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Juego ya instalado\n%1\n¿Te gustaría sobrescribirlo?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG es un parche, ¡por favor instala el juego primero!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>ERROR PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Extrayendo PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extracción terminada</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Juego instalado exitosamente en %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>El archivo no parece ser un archivo PKG válido</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Trucos / Parches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Los cheats/patches son experimentales.\nÚselos con precaución.\n\nDescargue los cheats individualmente seleccionando el repositorio y haciendo clic en el botón de descarga.\nEn la pestaña Patches, puede descargar todos los patches a la vez, elegir cuáles desea usar y guardar la selección.\n\nComo no desarrollamos los Cheats/Patches,\npor favor informe los problemas al autor del cheat.\n\n¿Creaste un nuevo cheat? Visita:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>No hay imagen disponible</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serie: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versión: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Tamaño: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Seleccionar archivo de trucos:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repositorio:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Descargar trucos</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Eliminar archivo</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>No se han seleccionado archivos.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Puedes eliminar los trucos que no quieras después de descargarlos.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>¿Deseas eliminar el archivo seleccionado?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Seleccionar archivo de parche:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Descargar parches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Guardar</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Trucos</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Parche</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>No se ha seleccionado ningún parche.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>No se puede abrir files.json para lectura.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>No se encontró ningún archivo de parche para la serie actual.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>No se puede abrir el archivo para lectura.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>No se puede abrir el archivo para escritura.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Error al analizar XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Éxito</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Opciones guardadas exitosamente.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Fuente inválida</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>La fuente seleccionada es inválida.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>El archivo ya existe</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>El archivo ya existe. ¿Deseas reemplazarlo?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Error al guardar el archivo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Error al descargar el archivo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Trucos no encontrados</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>No se encontraron trucos para este juego en esta versión del repositorio seleccionado,intenta con otro repositorio o con una versión diferente del juego.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Trucos descargados exitosamente</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Has descargado exitosamente los trucos para esta versión del juego desde el repositorio seleccionado. Puedes intentar descargar desde otro repositorio; si está disponible, también será posible usarlo seleccionando el archivo de la lista.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Error al guardar:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Error al descargar:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Descarga completa</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>¡Parches descargados exitosamente! Todos los parches disponibles para todos los juegos han sido descargados, no es necesario descargarlos individualmente para cada juego como ocurre con los trucos.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Error al analizar los datos JSON del HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Error al recuperar la página HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Error al abrir el archivo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>ERROR XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Error al abrir files.json para escritura</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Autor: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>El directorio no existe:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Error al abrir files.json para lectura.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Nombre:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="fi">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Huijaukset / Korjaukset</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Lataa Huijaukset / Korjaukset</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Tuettu Vulkan-versio</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Lataa huijaukset kaikille asennetuille peleille</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Lataa korjaukset kaikille peleille</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Lataus valmis</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Olet ladannut huijaukset kaikkiin asennettuihin peleihin.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Korjaukset ladattu onnistuneesti!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Kaikki saatavilla olevat korjaukset kaikille peleille on ladattu.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Pelit: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG-tiedosto (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF-tiedostot (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Pelin käynnistys</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Vain yksi tiedosto voidaan valita!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG:n purku</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Korjaus havaittu!\nPKG:n ja pelin versiot vastaavat!: %1\nHaluatko </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>korvata?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Korjaus havaittu!\nPKG Version %1 on vanhempi </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>kuin asennettu versio!: %2\nHaluatko </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>korvata?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Korjaus havaittu!\nPeli on asennettu: %1\nHaluatko </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>asentaa korjaus: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Peli on jo asennettu\n%1\nHaluatko korvata sen?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG on korjaus, asenna peli ensin!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG VIRHE</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Purkaminen PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Purku valmis</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Peli asennettu onnistuneesti kohtaan %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Tiedosto ei vaikuta olevan kelvollinen PKG-tiedosto</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Huijaukset / Korjaukset</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches ovat kokeellisia.\nKäytä varoen.\n\nLataa cheats yksitellen valitsemalla repositorio ja napsauttamalla latauspainiketta.\nPatches-välilehdellä voit ladata kaikki patchit kerralla, valita, mitä haluat käyttää, ja tallentaa valinnan.\n\nKoska emme kehitä Cheats/Patches,\nilmoita ongelmista cheatin tekijälle.\n\nLuo uusi cheat? Käy osoitteessa:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Kuvaa ei saatavilla</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Sarjanumero: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versio: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Koko: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Valitse huijaustiedosto:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Lataa huijaukset</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Poista tiedosto</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Ei tiedostoja valittu.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Voit poistaa ei-toivomasi huijaukset lataamisen jälkeen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Haluatko poistaa valitun tiedoston?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Valitse korjaustiedosto:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Lataa korjaukset</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Tallenna</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Huijaukset</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Korjaukset</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Virhe</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Ei korjausta valittu.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Tiedostoa files.json ei voitu avata lukemista varten.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Nykyiselle sarjanumerolle ei löytynyt korjaustiedostoa.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Tiedostoa ei voitu avata lukemista varten.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Tiedostoa ei voitu avata kirjoittamista varten.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>XML:n jäsentäminen epäonnistui: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Onnistui</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Vaihtoehdot tallennettu onnistuneesti.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Virheellinen lähde</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Valittu lähde on virheellinen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Tiedosto on olemassa</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Tiedosto on jo olemassa. Haluatko korvata sen?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Tiedoston tallentaminen epäonnistui:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Tiedoston lataaminen epäonnistui:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Huijauksia ei löytynyt</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Huijauksia ei löytynyt tälle pelille tämän version valitusta repositoriosta, yritä toista repositoriota tai pelin eri versiota.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Huijaukset ladattu onnistuneesti</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Olet ladannut huijaukset onnistuneesti valitusta repositoriosta tälle pelin versiolle. Voit yrittää ladata toisesta repositoriosta, jos se on saatavilla, voit myös käyttää sitä valitsemalla tiedoston luettelosta.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Tallentaminen epäonnistui:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Lataaminen epäonnistui:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Lataus valmis</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Korjaukset ladattu onnistuneesti! Kaikki saatavilla olevat korjaukset kaikille peleille on ladattu, eikä niitä tarvitse ladata yksittäin jokaiselle pelille kuten huijauksissa.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>JSON-tietojen jäsentäminen HTML:stä epäonnistui.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>HTML-sivun hakeminen epäonnistui.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Tiedoston avaaminen epäonnistui:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML VIRHE:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Tiedostoa files.json ei voitu avata kirjoittamista varten</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Tekijä: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Kansiota ei ole olemassa:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Tiedostoa files.json ei voitu avata lukemista varten.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Nimi:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="fr">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>À propos de shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 est un émulateur open-source expérimental de la PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>Ce logiciel ne doit pas être utilisé pour jouer à des jeux que vous n&apos;avez pas obtenus légalement.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Ouvrir un dossier</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Chargement de la liste de jeu, veuillez patienter...</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Annuler</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Chargement...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choisir un répertoire</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Répertoire d&apos;installation des jeux</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Parcourir</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>Le répertoire d'installation des jeux n&apos;est pas valide.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Créer un raccourci</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Ouvrir le dossier du jeu</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Cheats/Patchs</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>Visionneuse SFO</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Visionneuse de trophées</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copier infos</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copier le nom</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copier le numéro de série</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copier tout</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Création du raccourci</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Raccourci créé avec succès !\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Erreur lors de la création du raccourci !\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Installer un PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Ouvrir/Ajouter un dossier ELF</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Installer des packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Démarrer un jeu</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>À propos de shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configurer...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Installer une application depuis un fichier .pkg</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Jeux récents</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Fermer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Fermer shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Fermer l&apos;application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Afficher la liste de jeux</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Rafraîchir la liste de jeux</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Très Petit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Petit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Moyen</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Grand</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Mode liste</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Mode grille</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Visionneuse ELF</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Répertoire des jeux</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Télécharger Cheats/Patchs</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dumper la liste des jeux</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>Visionneuse PKG</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Chercher...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>Fichier</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Affichage</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Icônes des jeux</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Mode d&apos;affichage</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Paramètres</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utilitaire</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Thèmes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>À propos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Noir</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Blanc</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Vert</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Bleu</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>Bare d&apos;outils</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Ouvrir un dossier</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Visionneuse de trophées</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Paramètres</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>Général</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>Système</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Langage de la console</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Langage de l&apos;émulateur</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Émulateur</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Plein écran</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Afficher l&apos;image du jeu</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Mode PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Nom d&apos;utilisateur</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Journalisation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Filtre</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphismes</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Carte graphique</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Largeur</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Hauteur</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Avancé</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Dumper les shaders</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Dumper le PM4</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Débogage</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Activer le débogage</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Activer la couche de validation Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Activer la synchronisation de la validation Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Activer le débogage RenderDoc</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Version de Vulkan non prise en charge</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Télécharger les Cheats pour tous les jeux installés</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Télécharger les patchs pour tous les jeux</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Téléchargement terminé</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Vous avez téléchargé des Cheats pour tous les jeux installés.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patchs téléchargés avec succès !</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Tous les patchs disponibles pour les jeux ont é téléchargés.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Jeux : </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Fichiers PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Fichiers ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Démarrer un jeu</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Un seul fichier peut être sélectionné !</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Extraction du PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch détecté !\nLa version du PKG et du jeu correspondent : %1\nSouhaitez-vous </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>écraser ?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch détecté !\nVersion PKG %1 est plus ancienne </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>que la version installée ! : %2\nSouhaitez-vous </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>écraser ?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch détecté !\nJeu est installé : %1\nSouhaitez-vous </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>installer le patch : %2 ?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Jeu déjà installé\n%1\nSouhaitez-vous écraser ?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>Le PKG est un patch, veuillez d'abord installer le jeu !</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>Erreur PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Extraction PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extraction terminée</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Jeu installé avec succès à %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Le fichier ne semble pas être un PKG valide</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats/Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Les Cheats/Patchs sont expérimentaux.\nUtilisez-les avec précaution.\n\nTéléchargez les Cheats individuellement en sélectionnant le dépôt et en cliquant sur le bouton de téléchargement.\nDans l'onglet Patchs, vous pouvez télécharger tous les patchs en une seule fois, choisir lesquels vous souhaitez utiliser et enregistrer votre sélection.\n\nComme nous ne développons pas les Cheats/Patches,\nmerci de signaler les problèmes à l'auteur du Cheat.\n\nVous avez créé un nouveau cheat ? Visitez :\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Aucune image disponible</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Série : </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Version : </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Taille : </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Sélectionner le fichier de Cheat :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Dépôt :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Télécharger les Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Supprimer le fichier</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Aucun fichier sélectionné.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Vous pouvez supprimer les Cheats que vous ne souhaitez pas après les avoir téléchargés.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Voulez-vous supprimer le fichier sélectionné ?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Sélectionner le fichier de patch :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Télécharger les patchs</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Enregistrer</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patchs</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Aucun patch sélectionné.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Impossible d'ouvrir files.json pour la lecture.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Aucun fichier de patch trouvé pour la série actuelle.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Impossible d'ouvrir le fichier pour la lecture.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Impossible d'ouvrir le fichier pour l'écriture.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Échec de l'analyse XML : </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Succès</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Options enregistrées avec succès.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Source invalide</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>La source sélectionnée est invalide.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Le fichier existe</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Le fichier existe déjà. Voulez-vous le remplacer ?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Échec de l'enregistrement du fichier :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Échec du téléchargement du fichier :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheats non trouvés</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Aucun Cheat trouvé pour ce jeu dans cette version du dépôt sélectionné, essayez un autre dépôt ou une version différente du jeu.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats téléchargés avec succès</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Vous avez téléchargé les cheats avec succès pour cette version du jeu depuis le dépôt sélectionné. Vous pouvez essayer de télécharger depuis un autre dépôt, si disponible, il sera également possible de l'utiliser en sélectionnant le fichier dans la liste.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Échec de l'enregistrement :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Échec du téléchargement :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Téléchargement terminé</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patchs téléchargés avec succès ! Tous les patches disponibles pour tous les jeux ont é téléchargés, il n'est pas nécessaire de les télécharger individuellement pour chaque jeu comme c'est le cas pour les Cheats.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Échec de l'analyse des données JSON à partir du HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Échec de la récupération de la page HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Échec de l'ouverture du fichier :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>Erreur XML :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Échec de l'ouverture de files.json pour l'écriture</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Auteur : </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Répertoire n'existe pas :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Échec de l'ouverture de files.json pour la lecture.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Nom :</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="hu_HU">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>A shadPS4-ről</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>A shadPS4 egy kezdetleges, open-source PlayStation 4 emulátor.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>Ne használja ezt a szoftvert olyan játékokkal, amelyeket nem legális módon szerzett be.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Mappa megnyitása</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Játék könyvtár betöltése, kérjük várjon :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Megszakítás</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Betöltés..</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Mappa kiválasztása</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Mappa a játékok telepítésére</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Böngészés</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Hiba</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>A játékok telepítéséhez megadott érték nem érvényes.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="39"/>
<source>Create Shortcut</source>
<translation>Parancsikon Létrehozása</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="40"/>
<source>Open Game Folder</source>
<translation>Játék Mappa Megnyitása</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Csalások / Javítások</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="41"/>
<source>SFO Viewer</source>
<translation>SFO Néző</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="42"/>
<source>Trophy Viewer</source>
<translation>Trófeák Megtekintése</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Copy info</source>
<translation>Információ Másolása</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="51"/>
<source>Copy Name</source>
<translation>Név Másolása</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="52"/>
<source>Copy Serial</source>
<translation>Széria Másolása</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="53"/>
<source>Copy All</source>
<translation>Összes Másolása</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="173"/>
<source>Shortcut creation</source>
<translation>Parancsikon létrehozása</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="174"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Parancsikon sikeresen létrehozva!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="177"/>
<source>Error</source>
<translation>Hiba</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="178"/>
<source>Error creating shortcut!\n %1</source>
<translation>Hiba a parancsikon létrehozásával!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="253"/>
<source>Install PKG</source>
<translation>PKG telepítése</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Efl Mappa Megnyitása/Hozzáadása</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>PKG-k Telepítése (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Játék Bootolása</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>A shadPS4-ről</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Konfigurálás...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Program telepítése egy .pkg fájlból</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Legutóbbi Játékok</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Kilépés</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Kilépés a shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Lépjen ki az programból.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Játék Könyvtár Megjelenítése</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Játék Könyvtár Újratöltése</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Apró</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Kicsi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Közepes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Nagy</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Lista Nézet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Rács Nézet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Néző</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Játék Telepítési Mappa</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Csalások / Javítások letöltése</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Játék Lista Dumpolása</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Néző</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Keresés...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>Fájl</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Megnézés</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Játék Könyvtár Ikonok</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Játék Könyvtár Mód</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Beállítások</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Segédeszközök</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Témák</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>Segítség</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Sötét</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Világos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Zöld</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Kék</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Ibolya</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>Eszköztár</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Mappa Megnyitása</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trófeák Megtekintése</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Beállítások</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>Általános</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>Rendszer</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>A Konzol Nyelvezete</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Az Emulátor Nyelvezete</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulátor</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Teljesképernyő Engedélyezése</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Indítóképernyő Mutatása</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Felhasználónév</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Naplózó</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Naplózási Típus</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Naplózási Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Grafika</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Grafikai Eszköz</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Szélesség</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Magasság</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Elosztó</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Haladó</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Shader Dumpolás Engedélyezése</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>NULL GPU Engedélyezése</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>PM4 Dumpolás Engedélyezése</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debugolás</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Debug Dumpolás Engedélyezése</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Vulkan Validációs Rétegek Engedélyezése</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Vulkan Szinkronizálás Validáció</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>RenderDoc Debugolás Engedélyezése</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Támogatott Vulkan verzió hiányzik</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Letöltés csalások minden telepített játékhoz</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Frissítések letöltése minden játékhoz</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Letöltés befejezve</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Csalásokat töltöttél le az összes telepített játékhoz.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Frissítések sikeresen letöltve!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Az összes játékhoz elérhető frissítés letöltésre került.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Játékok: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG fájl (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF fájlok (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Játék indító</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Csak egy fájl választható ki!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG kicsomagolás</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Javítás észlelve!\nA PKG és a játék verziók egyeznek: %1\nSzeretnéd </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>felülírni?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Javítás észlelve!\nA PKG verzió %1 régebbi </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>mint a telepített verzió: %2\nSzeretnéd </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>felülírni?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Javítás észlelve!\nA játék telepítve van: %1\nSzeretnéd </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>a javítást telepíteni: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>A játék már telepítve van\n%1\nSzeretnéd felülírni?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>A PKG egy javítás, először telepítsd a játékot!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG HIBA</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>PKG kicsomagolása %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Kicsomagolás befejezve</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>A játék sikeresen telepítve itt: %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>A fájl nem tűnik érvényes PKG fájlnak</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Csalások / Javítások</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>A csalások/patchek kísérleti jellegűek.\nHasználja őket óvatosan.\n\nTöltse le a csalásokat egyesével a repository kiválasztásával és a letöltés gombra kattintással.\nA Patches fül alatt egyszerre letöltheti az összes patchet, választhat, melyeket szeretné használni, és elmentheti a választását.\n\nMivel nem fejlesztjük a csalásokat/patch-eket,\nkérjük, jelentse a problémákat a csalás szerzőjének.\n\nKészített egy új csalást? Látogasson el ide:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Nincs elérhető kép</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Sorozatszám: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Verzió: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Méret: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Válaszd ki a csalás fájlt:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Tároló:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Csalások letöltése</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Fájl törlése</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Nincsenek kiválasztott fájlok.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Törölheted a nem kívánt csalásokat a letöltés után.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Szeretnéd törölni a kiválasztott fájlt?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Válaszd ki a javítás fájlt:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Javítások letöltése</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Mentés</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Csalások</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Javítások</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Hiba</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Nincs kiválasztva javítás.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Nem sikerült megnyitni a files.json fájlt olvasásra.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Nincs található javítási fájl a jelenlegi sorozatszámhoz.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Nem sikerült megnyitni a fájlt olvasásra.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Nem sikerült megnyitni a fájlt írásra.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>XML elemzési hiba: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Siker</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>A beállítások sikeresen elmentve.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Érvénytelen forrás</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>A kiválasztott forrás érvénytelen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>A fájl létezik</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>A fájl már létezik. Szeretnéd helyettesíteni?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Nem sikerült elmenteni a fájlt:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Nem sikerült letölteni a fájlt:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Csalások nem találhatóak</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Nincs található csalás ezen a játékverzión ebben a kiválasztott tárolóban,próbálj meg egy másik tárolót vagy a játék egy másik verzióját.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Csalások sikeresen letöltve</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Sikeresen letöltötted a csalásokat ennek a játéknak a verziójához a kiválasztott tárolóból. Próbálhatsz letölteni egy másik tárolóból is, ha az elérhető, akkor a fájl kiválasztásával az is használható lesz.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Nem sikerült menteni:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Nem sikerült letölteni:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Letöltés befejezve</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Frissítések sikeresen letöltve! Minden elérhető frissítés letöltésre került, nem szükséges egyesével letölteni őket minden játékhoz, mint a csalások esetében.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Nem sikerült az JSON adatok elemzése HTML-ből.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Nem sikerült HTML oldal lekérése.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Nem sikerült megnyitni a fájlt:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML HIBA:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Nem sikerült megnyitni a files.json fájlt írásra</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Szerző: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>A könyvtár nem létezik:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Nem sikerült megnyitni a files.json fájlt olvasásra.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Név:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="id">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Cheat / Patch</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Unduh Cheat / Patch</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Versi Vulkan Tidak Didukung</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Unduh Cheat Untuk Semua Game Yang Terpasang</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Unduh Patch Untuk Semua Game</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Unduhan Selesai</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Anda telah mengunduh cheat untuk semua game yang terpasang.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patch Berhasil Diunduh!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Semua Patch yang tersedia untuk semua game telah diunduh.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Game: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>File PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>File ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Hanya satu file yang bisa dipilih!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Ekstraksi PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch terdeteksi!\nVersi PKG dan Game cocok!: %1\nApakah Anda ingin </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>menimpa?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch terdeteksi!\nVersi PKG %1 lebih lama </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>daripada versi yang terpasang!: %2\nApakah Anda ingin </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>menimpa?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch terdeteksi!\nGame terpasang: %1\nApakah Anda ingin </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>memasang Patch: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Game sudah terpasang\n%1\nApakah Anda ingin menimpa?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG adalah patch, harap pasang game terlebih dahulu!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>KESALAHAN PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Mengekstrak PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Ekstraksi Selesai</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Game berhasil dipasang di %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>File tampaknya bukan file PKG yang valid</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheat / Patch</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches bersifat eksperimental.\nGunakan dengan hati-hati.\n\nUnduh cheats satu per satu dengan memilih repositori dan mengklik tombol unduh.\nDi tab Patches, Anda dapat mengunduh semua patch sekaligus, memilih yang ingin digunakan, dan menyimpan pilihan Anda.\n\nKarena kami tidak mengembangkan Cheats/Patches,\nharap laporkan masalah kepada pembuat cheat.\n\nMembuat cheat baru? Kunjungi:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Tidak Ada Gambar Tersedia</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serial: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versi: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Ukuran: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Pilih File Cheat:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repositori:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Unduh Cheat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Hapus File</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Tidak ada file yang dipilih.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Anda dapat menghapus cheat yang tidak Anda inginkan setelah mengunduhnya.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Apakah Anda ingin menghapus berkas yang dipilih?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Pilih File Patch:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Unduh Patch</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Simpan</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patch</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Kesalahan</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Tidak ada patch yang dipilih.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Tidak dapat membuka files.json untuk dibaca.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Tidak ada file patch ditemukan untuk serial saat ini.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Tidak dapat membuka file untuk dibaca.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Tidak dapat membuka file untuk menulis.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Gagal menganalisis XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Sukses</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Opsi berhasil disimpan.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Sumber Tidak Valid</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Sumber yang dipilih tidak valid.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>File Ada</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>File sudah ada. Apakah Anda ingin menggantinya?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Gagal menyimpan file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Gagal mengunduh file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheat Tidak Ditemukan</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Cheat tidak ditemukan untuk game ini dalam versi repositori yang dipilih,cobalah repositori lain atau versi game yang berbeda.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheat Berhasil Diunduh</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Anda telah berhasil mengunduh cheat untuk versi game ini dari repositori yang dipilih. Anda bisa mencoba mengunduh dari repositori lain, jika tersedia akan juga memungkinkan untuk menggunakannya dengan memilih file dari daftar.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Gagal menyimpan:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Gagal mengunduh:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Unduhan Selesai</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patch Berhasil Diunduh! Semua Patch yang tersedia untuk semua game telah diunduh, tidak perlu mengunduhnya satu per satu seperti yang terjadi pada Cheat.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Gagal menganalisis data JSON dari HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Gagal mengambil halaman HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Gagal membuka file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>KESALAHAN XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Gagal membuka files.json untuk menulis</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Penulis: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Direktori tidak ada:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Gagal membuka files.json untuk dibaca.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Nama:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="it">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>Riguardo shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 è un emulatore sperimentale open source per PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>Questo programma non dovrebbe essere utilizzato per riprodurre giochi che non vengono ottenuti legalmente.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Apri Cartella</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Caricamento lista giochi, attendere :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Annulla</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Caricamento...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Scegli cartella</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Cartella di installazione dei giochi</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Sfoglia</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>Il valore del percorso di installazione dei giochi non è valido.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Crea scorciatoia</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Apri cartella del gioco</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Trucchi / Patch</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>Visualizzatore SFO</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Visualizzatore Trofei</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copia informazioni</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copia Nome</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copia Seriale</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copia Tutto</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Creazione scorciatoia</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Scorciatoia creata con successo!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Errore nella creazione della scorciatoia!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Installa PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Apri/Aggiungi cartella Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Installa Pacchetti (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Avvia Gioco</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>Riguardo a shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configura...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Installa applicazione da un file .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Giochi Recenti</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Uscita</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Esci da shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Esci dall'applicazione.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Mostra Lista Giochi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Aggiorna Lista Giochi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Minuscolo</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Piccolo</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medio</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Grande</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Visualizzazione lista</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Visualizzazione Griglia</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Visualizzatore Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Cartella Installazione Giochi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Scarica Trucchi / Patch</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Scarica Lista Giochi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>Visualizzatore PKG</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Cerca...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Visualizza</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Icone Lista Giochi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Modalità Lista Giochi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Impostazioni</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utilità</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Temi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>Info su</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Scuro</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Chiaro</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Verde</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blu</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Viola</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>barra strumenti</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Apri Cartella</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Visualizzatore Trofei</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Impostazioni</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>Generale</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>Sistema</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Lingua della console</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Lingua dell'emulatore</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulatore</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Abilita Schermo Intero</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Mostra Schermata Iniziale</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Modalità Ps4Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Nome Utente</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Tipo di Log</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Filtro Log</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Grafica</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Adattatore grafico</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Larghezza</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Altezza</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Divisore Vblank</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Avanzato</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Abilita Dump Shader</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Abilita NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Abilita Dump PM4</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Abilita Dump Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Abilita Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Abilita Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Abilita Debugging RenderDoc</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Versi Vulkan Tidak Didukung</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Unduh Cheat Untuk Semua Game yang Terinstal</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Unduh Patch Untuk Semua Game</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Unduhan Selesai</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Anda telah mengunduh cheat untuk semua game yang telah Anda instal.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patch Berhasil Diunduh!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Semua patch yang tersedia untuk semua game telah diunduh.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Game: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>File PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>File ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Hanya satu file yang dapat dipilih!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Ekstraksi PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch terdeteksi!\nVersi PKG dan Game cocok!: %1\nApakah Anda ingin </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>menimpa?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch terdeteksi!\nVersi PKG %1 lebih lama </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>daripada versi yang terinstal!: %2\nApakah Anda ingin </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>menimpa?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch terdeteksi!\nGame terinstal: %1\nApakah Anda ingin </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>menginstal Patch: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Game sudah terinstal\n%1\nApakah Anda ingin menimpa?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG adalah patch, silakan instal game terlebih dahulu!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>ERROR PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Estrazione PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Ekstraksi Selesai</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Game berhasil diinstal di %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>File tidak tampak sebagai file PKG yang valid</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheat / Patch</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>I cheats/patches sono sperimentali.\nUtilizzali con cautela.\n\nScarica i cheats singolarmente selezionando il repository e cliccando sul pulsante di download.\nNella scheda Patches, puoi scaricare tutti i patch in una volta sola, scegliere quali vuoi utilizzare e salvare la tua selezione.\n\nPoiché non sviluppiamo i Cheats/Patches,\nper favore segnala i problemi all'autore del cheat.\n\nHai creato un nuovo cheat? Visita:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Tidak Ada Gambar</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serial: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versi: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Ukuran: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Pilih File Cheat:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repositori:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Unduh Cheat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Hapus File</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Tidak ada file yang dipilih.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Anda dapat menghapus cheat yang tidak diinginkan setelah mengunduhnya.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Apakah Anda ingin menghapus file yang dipilih?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Pilih File Patch:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Unduh Patch</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Simpan</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patch</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Kesalahan</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Tidak ada patch yang dipilih.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Gagal membuka files.json untuk dibaca.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Tidak ada file patch ditemukan untuk serial saat ini.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Gagal membuka file untuk dibaca.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Gagal membuka file untuk ditulis.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Gagal mengurai XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Berhasil</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Opsi berhasil disimpan.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Sumber Tidak Valid</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Sumber yang dipilih tidak valid.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>File Ada</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>File sudah ada. Apakah Anda ingin menggantinya?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Gagal menyimpan file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Gagal mengunduh file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheat Tidak Ditemukan</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Cheat tidak ditemukan untuk game ini dalam versi repositori yang dipilih, coba repositori lain atau versi game yang berbeda.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheat Berhasil Diunduh</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Anda telah berhasil mengunduh cheat untuk versi game ini dari repositori yang dipilih. Anda dapat mencoba mengunduh dari repositori lain, jika tersedia, Anda juga dapat menggunakannya dengan memilih file dari daftar.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Gagal menyimpan:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Gagal mengunduh:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Unduhan Selesai</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patch Berhasil Diunduh! Semua patch yang tersedia untuk semua game telah diunduh, tidak perlu mengunduhnya secara individu untuk setiap game seperti yang terjadi pada Cheat.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Gagal mengurai data JSON dari HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Gagal mengambil halaman HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Gagal membuka file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>KESALAHAN XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Gagal membuka files.json untuk menulis</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Penulis: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Direktori tidak ada:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Gagal membuka files.json untuk dibaca.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Nama:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS version="2.1" language="ja_JP">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>shadPS4について</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4はPlayStation 4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>使</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation></translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>お待ちください :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - </translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation></translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation></translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation></translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation> / </translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFOビューワー</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>PKGをインストール</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Elfフォルダを開く/</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation> (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>shadPS4について</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>.pkgファイルからアプリケーションをインストールする</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>shadPS4を終了</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elfビュワー</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation> / </translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKGビューアー</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation></translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation></translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation></translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation></translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>PS4 Proモード</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblankディバイダー</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>NULL GPUを有効にする</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>PM4ダンプを有効にする</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation></translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Vulkan検証レイヤーを有効にする</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Vulkan同期検証を有効にする</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>RenderDocデバッグを有効にする</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkanバージョン</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKGファイル (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELFファイル (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG抽出</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>\nPKGとゲームバージョンが一致しています: %1\n上書きしますか</translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>\nPKGバージョン %1 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>: %2\n上書きしますか</translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>\nゲームがインストールされています: %1\nインストールしますか</translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>\n%1\n上書きしますか</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKGはパッチです</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKGエラー</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>PKGを抽出中 %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>PKGファイルでないようです</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation> / </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>/\n使用には注意してください\n\nリポジトリを選択し\nPatches使\n\nチート/\n問題があればチートの作者に報告してください\n\n新しいチートを作成しましたか\nhttps://github.com/shadps4-emu/ps4_cheats を訪問してください。</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>files.jsonを読み込み用に開けません</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>XMLの解析に失敗しました: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation> 使</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation> </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>HTMLからJSONデータの解析に失敗しました</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>HTMLページの取得に失敗しました</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XMLエラー:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>files.jsonを記録用に開けません</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>files.jsonを読み込み用に開けません</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="ko_KR">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation> / </translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation> / </translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Unsupported Vulkan Version</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Download Cheats For All Installed Games</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Download Patches For All Games</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Download Complete</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>You have downloaded cheats for all the games you have installed.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patches Downloaded Successfully!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>All Patches available for all games have been downloaded.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Games: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG File (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF files (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Game Boot</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Only one file can be selected!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG Extraction</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch detected!\nPKG and Game versions match!: %1\nWould you like </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>to overwrite?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch detected!\nPKG Version %1 is older </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>than installed version!: %2\nWould you like </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>to overwrite?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch detected!\nGame is installed: %1\nWould you like </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>to install Patch: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Game already installed\n%1\nWould you like to overwrite?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG is a patch, please install the game first!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG ERROR</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Extracting PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extraction Finished</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Game successfully installed at %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>File doesn't appear to be a valid PKG file</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>No Image Available</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serial: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Version: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Size: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Select Cheat File:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repository:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Download Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Delete File</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>No files selected.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>You can delete the cheats you don't want after downloading them.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Do you want to delete the selected file?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Select Patch File:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Download Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Save</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>No patch selected.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Unable to open files.json for reading.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>No patch file found for the current serial.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Unable to open the file for reading.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Unable to open the file for writing.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Failed to parse XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Success</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Options saved successfully.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Invalid Source</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>The selected source is invalid.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>File Exists</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>File already exists. Do you want to replace it?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Failed to save file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Failed to download file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheats Not Found</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats Downloaded Successfully</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Failed to save:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Failed to download:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Download Complete</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patches Downloaded Successfully! All Patches available for all games have been downloaded, there is no need to download them individually for each game as happens in Cheats.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Failed to parse JSON data from HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Failed to retrieve HTML page.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Failed to open file:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML ERROR:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Failed to open files.json for writing</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Author: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Directory does not exist:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Failed to open files.json for reading.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Name:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="it_LT">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Apgaulės / Pleistrai</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Atsisiųsti Apgaules / Pleistrus</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Nepalaikoma Vulkan versija</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Atsisiųsti sukčiavimus visiems įdiegtiems žaidimams</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Atsisiųsti pataisas visiems žaidimams</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Atsisiuntimas baigtas</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Jūs atsisiuntėte sukčiavimus visiems jūsų įdiegtiesiems žaidimams.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Pataisos sėkmingai atsisiųstos!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Visos pataisos visiems žaidimams buvo atsisiųstos.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Žaidimai: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG failas (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF failai (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Žaidimo paleidimas</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Galite pasirinkti tik vieną failą!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG ištraukimas</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Pataisa aptikta!\nPKG ir žaidimo versijos atitinka!: %1\nAr norėtumėte </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>perrašyti?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Pataisa aptikta!\nPKG versija %1 yra senesnė </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>nei įdiegta versija!: %2\nAr norėtumėte </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>perrašyti?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Pataisa aptikta!\nŽaidimas įdiegtas: %1\nAr norėtumėte </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>įdiegti pataisą: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Žaidimas jau įdiegtas\n%1\nAr norėtumėte perrašyti?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG yra pataisa, prašome pirmiausia įdiegti žaidimą!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG KLAIDA</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Ekstrakcinis PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Ekstrakcija baigta</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Žaidimas sėkmingai įdiegtas %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Failas atrodo, kad nėra galiojantis PKG failas</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Sukčiavimai / Pataisos</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches yra eksperimentiniai.\nNaudokite atsargiai.\n\nAtsisiųskite cheats atskirai pasirinkdami saugyklą ir paspausdami atsisiuntimo mygtuką.\nPatches skirtuke galite atsisiųsti visus patchus vienu metu, pasirinkti, kuriuos norite naudoti, ir išsaugoti pasirinkimą.\n\nKadangi mes nekurime Cheats/Patches,\npraneškite problemas cheat autoriui.\n\nSukūrėte naują cheat? Apsilankykite:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Nuotrauka neprieinama</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Seriinis numeris: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versija: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Dydis: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Pasirinkite sukčiavimo failą:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Saugykla:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Atsisiųsti sukčiavimus</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Pašalinti failą</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Failai nepasirinkti.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Galite pašalinti sukčiavimus, kurių nenorite, juos atsisiuntę.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Ar norite ištrinti pasirinktą failą?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Pasirinkite pataisos failą:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Atsisiųsti pataisas</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Įrašyti</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Sukčiavimai</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Pataisos</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Klaida</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Nieko nepataisyta.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Neįmanoma atidaryti files.json skaitymui.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Nepavyko rasti pataisos failo dabartiniam serijiniam numeriui.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Neįmanoma atidaryti failo skaitymui.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Neįmanoma atidaryti failo rašymui.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Nepavyko išanalizuoti XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Sėkmė</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Nustatymai sėkmingai išsaugoti.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Netinkamas šaltinis</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Pasirinktas šaltinis yra netinkamas.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Failas egzistuoja</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Failas jau egzistuoja. Ar norite pakeisti?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Nepavyko išsaugoti failo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Nepavyko atsisiųsti failo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Sukčiavimai nerasti</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Nerasta sukčiavimų šiam žaidimui šioje pasirinktos saugyklos versijoje,bandykite kitą saugyklą arba skirtingą žaidimo versiją.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Sukčiavimai sėkmingai atsisiųsti</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Sėkmingai atsisiuntėte sukčiavimus šios žaidimo versijos pasirinktos saugyklos. Galite pabandyti atsisiųsti kitos saugyklos, jei ji yra prieinama, taip pat bus galima naudoti pasirinkus failą sąrašo.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Nepavyko išsaugoti:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Nepavyko atsisiųsti:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Atsisiuntimas baigtas</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Pataisos sėkmingai atsisiųstos! Visos pataisos visiems žaidimams buvo atsisiųstos, nebėra reikalo jas atsisiųsti atskirai kiekvienam žaidimui, kaip tai vyksta su sukčiavimais.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Nepavyko išanalizuoti JSON duomenų HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Nepavyko gauti HTML puslapio.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Nepavyko atidaryti failo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML KLAIDA:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Nepavyko atidaryti files.json rašymui</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Autorius: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Katalogas neegzistuoja:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Nepavyko atidaryti files.json skaitymui.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Pavadinimas:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="nb">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Juks / Oppdateringer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Last ned Juks / Oppdateringer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Ikke støttet Vulkan-versjon</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Last ned jukser for alle installerte spill</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Last ned oppdateringer for alle spill</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Nedlasting fullført</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Du har lastet ned jukser for alle spillene du har installert.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Oppdateringer lastet ned vellykket!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Alle oppdateringer tilgjengelige for alle spillene har blitt lastet ned.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Spill: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG-fil (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF-filer (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Spilloppstart</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Kun én fil kan velges!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG-ekstraksjon</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Oppdatering oppdaget!\nPKG og spillversjoner stemmer!: %1\nØnsker du å </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>overskrive?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Oppdatering oppdaget!\nPKG-versjon %1 er eldre </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>enn installert versjon!: %2\nØnsker du å </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>overskrive?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Oppdatering oppdaget!\nSpillet er installert: %1\nØnsker du å </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>installere oppdateringen: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Spill allerede installert\n%1\nØnsker du å overskrive?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG er en oppdatering, vennligst installer spillet først!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG FEIL</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Ekstraherer PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Ekstrahering fullført</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Spillet ble installert vellykket %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Fil ser ikke ut til å være en gyldig PKG-fil</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Jukser / Oppdateringer</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches er eksperimentelle.\nBruk med forsiktighet.\n\nLast ned cheats individuelt ved å velge depotet og klikke nedlastingsknappen.\nPå fanen Patches kan du laste ned alle patches samtidig, velge hvilke du ønsker å bruke, og lagre valget ditt.\n\nSiden vi ikke utvikler Cheats/Patches,\nvær vennlig å rapportere problemer til cheat-utvikleren.\n\nHar du laget en ny cheat? Besøk:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Ingen bilde tilgjengelig</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serienummer: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versjon: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Størrelse: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Velg juksfil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Depot:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Last ned jukser</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Slett fil</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Ingen filer valgt.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Du kan slette jukser du ikke ønsker etter å ha lastet dem ned.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Ønsker du å slette den valgte filen?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Velg oppdateringsfil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Last ned oppdateringer</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Lagre</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Jukser</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Oppdateringer</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Feil</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Ingen oppdatering valgt.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Kan ikke åpne files.json for lesing.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Ingen oppdateringsfil funnet for det aktuelle serienummeret.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Kan ikke åpne filen for lesing.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Kan ikke åpne filen for skriving.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Feil ved parsing av XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Vellykket</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Alternativer lagret vellykket.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Ugyldig kilde</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Den valgte kilden er ugyldig.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Fil eksisterer</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Fil eksisterer allerede. Ønsker du å erstatte den?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Kunne ikke lagre fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Kunne ikke laste ned fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Jukser ikke funnet</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Ingen jukser funnet for dette spillet i denne versjonen av det valgte depotet,prøv et annet depot eller en annen versjon av spillet.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Jukser lastet ned vellykket</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Du har lastet ned jukser vellykket for denne versjonen av spillet fra det valgte depotet. Du kan prøve å laste ned fra et annet depot, hvis det er tilgjengelig, vil det også være mulig å bruke det ved å velge filen fra listen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Kunne ikke lagre:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Kunne ikke laste ned:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Nedlasting fullført</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Oppdateringer lastet ned vellykket! Alle oppdateringer tilgjengelige for alle spill har blitt lastet ned, det er ikke nødvendig å laste dem ned individuelt for hvert spill som skjer med jukser.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Kunne ikke analysere JSON-data fra HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Kunne ikke hente HTML-side.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Kunne ikke åpne fil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML FEIL:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Kunne ikke åpne files.json for skriving</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Forfatter: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Direktory eksisterer ikke:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Kunne ikke åpne files.json for lesing.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Navn:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="nl">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Download Cheats/Patches</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Niet ondersteunde Vulkan-versie</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Download cheats voor alle geïnstalleerde spellen</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Download patches voor alle spellen</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Download voltooid</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Je hebt cheats gedownload voor alle spellen die je hebt geïnstalleerd.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patches succesvol gedownload!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Alle patches voor alle spellen zijn gedownload.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Spellen: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG-bestand (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF-bestanden (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Spelopstart</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Je kunt slechts één bestand selecteren!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG-extractie</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch gedetecteerd!\nPKG en spelversies komen overeen!: %1\nWil je </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>overschrijven?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch gedetecteerd!\nPKG-versie %1 is ouder </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>dan de geïnstalleerde versie!: %2\nWil je </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>overschrijven?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch gedetecteerd!\nSpel is geïnstalleerd: %1\nWil je </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>de patch installeren: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Spel al geïnstalleerd\n%1\nWil je het overschrijven?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG is een patch, installeer eerst het spel!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG FOUT</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>PKG %1/%2 aan het extraheren</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extractie voltooid</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Spel succesvol geïnstalleerd op %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Het bestand lijkt geen geldig PKG-bestand te zijn</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches zijn experimenteel.\nGebruik met voorzichtigheid.\n\nDownload cheats afzonderlijk door het repository te selecteren en op de downloadknop te klikken.\nOp het tabblad Patches kun je alle patches tegelijk downloaden, kiezen welke je wilt gebruiken en je selectie opslaan.\n\nAangezien wij de Cheats/Patches niet ontwikkelen,\nmeld problemen bij de auteur van de cheat.\n\nHeb je een nieuwe cheat gemaakt? Bezoek:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Geen afbeelding beschikbaar</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serie: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versie: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Grootte: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Selecteer cheatbestand:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repository:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Download cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Bestand verwijderen</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Geen bestanden geselecteerd.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Je kunt de cheats die je niet wilt verwijderen nadat je ze hebt gedownload.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Wil je het geselecteerde bestand verwijderen?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Selecteer patchbestand:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Download patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Opslaan</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Fout</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Geen patch geselecteerd.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Kan files.json niet openen voor lezen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Geen patchbestand gevonden voor het huidige serienummer.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Kan het bestand niet openen voor lezen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Kan het bestand niet openen voor schrijven.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>XML parsing mislukt: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Succes</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Opties succesvol opgeslagen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Ongeldige bron</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>De geselecteerde bron is ongeldig.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Bestand bestaat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Bestand bestaat al. Wil je het vervangen?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Kan bestand niet opslaan:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Kan bestand niet downloaden:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheats niet gevonden</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Geen cheats gevonden voor deze game in deze versie van de geselecteerde repository.Probeer een andere repository of een andere versie van het spel.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats succesvol gedownload</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Je hebt cheats succesvol gedownload voor deze versie van het spel uit de geselecteerde repository. Je kunt proberen te downloaden van een andere repository. Als deze beschikbaar is, kan het ook worden gebruikt door het bestand uit de lijst te selecteren.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Opslaan mislukt:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Downloaden mislukt:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Download voltooid</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patches succesvol gedownload! Alle beschikbare patches voor alle spellen zijn gedownload. Het is niet nodig om ze afzonderlijk te downloaden voor elk spel dat cheats heeft.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Kan JSON-gegevens uit HTML niet parseren.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Kan HTML-pagina niet ophalen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Kan bestand niet openen:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML FOUT:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Kan files.json niet openen voor schrijven</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Auteur: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Map bestaat niet:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Kan files.json niet openen voor lezen.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Naam:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="pl_PL">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>O programie</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 to eksperymentalny otwartoźródłowy emulator konsoli PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>To oprogramowanie nie służy do grania w gry pochodzące z nielegalnego źródła.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Otwórz folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Ładowanie listy gier, proszę poczekaj :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Ładowanie...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Wybierz katalog</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Katalog do instalacji gier</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Przeglądaj</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>Podana ścieżka do instalacji gier nie jest prawidłowa.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Utwórz skrót</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Otwórz katalog gry</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Kody / Patche</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>Menedżer plików SFO</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Menedżer trofeów</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Kopiuj informacje</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Kopiuj nazwę</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Kopiuj numer seryjny</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Kopiuj wszystko</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Tworzenie skrótu</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Utworzenie skrótu zakończone pomyślnie!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Utworzenie skrótu zakończone niepowodzeniem!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Zainstaluj PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Otwórz/Dodaj folder Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Zainstaluj paczkę (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Uruchom grę</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>O programie</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Konfiguruj...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Zainstaluj aplikacje z pliku .pkg</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Ostatnie gry</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Wyjdź</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Wyjdź z shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Wyjdź z aplikacji.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Pokaż listę gier</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Odśwież listę gier</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Malutkie</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Małe</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Średnie</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Wielkie</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Widok listy</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Widok siatki</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Menedżer plików ELF</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Katalog zainstalowanej gry</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Pobierz Kody / Patche</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Zgraj listę gier</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>Menedżer plików PKG</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Szukaj...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>Plik</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Widok</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Ikony w widoku listy</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Tryb listy gier</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Ustawienia</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Narzędzia</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Motywy</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>O programie</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Ciemny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Jasny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Zielony</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Niebieski</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Fioletowy</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>Pasek narzędzi</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Menedżer trofeów</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Ustawienia</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>Ogólne</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Język konsoli</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Język emulatora</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Włącz pełny ekran</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Pokaż ekran powitania</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Emulacja PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Nazwa użytkownika</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Dziennik zdarzeń</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Typ dziennika</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Filtrowanie dziennika</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Grafika</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Karta graficzna</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Szerokość</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Wysokość</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Dzielnik pionowego blankingu (Vblank)</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Zaawansowane</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Włącz zgrywanie cieni</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Wyłącz kartę graficzną</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Włącz zgrywanie PM4</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debugowanie</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Włącz zgrywanie debugowania</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Włącz warstwy walidacji Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Włącz walidację synchronizacji Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Włącz debugowanie RenderDoc</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Nieobsługiwana wersja Vulkan</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Pobierz kody do wszystkich zainstalowanych gier</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Pobierz poprawki do wszystkich gier</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Pobieranie zakończone</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Pobrałeś kody do wszystkich zainstalowanych gier.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Poprawki pobrane pomyślnie!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Wszystkie poprawki dostępne dla wszystkich gier zostały pobrane.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Gry: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Plik PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Pliki ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Uruchomienie gry</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Można wybrać tylko jeden plik!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Ekstrakcja PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Wykryto poprawkę!\nWersje PKG i gry pasują do siebie!: %1\nCzy chcesz </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>nadpisać?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Wykryto poprawkę!\nWersja PKG %1 jest starsza </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>niż zainstalowana wersja!: %2\nCzy chcesz </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>nadpisać?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Wykryto poprawkę!\nGra jest zainstalowana: %1\nCzy chcesz </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>zainstalować poprawkę: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Gra już zainstalowana\n%1\nCzy chcesz nadpisać?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG jest poprawką, proszę najpierw zainstalować grę!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>BŁĄD PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Ekstrakcja PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Ekstrakcja zakończona</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Gra pomyślnie zainstalowana w %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Plik nie wydaje się być prawidłowym plikiem PKG</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Kody / Poprawki</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheaty/Patche eksperymentalne.\nUżywaj ich ostrożnie.\n\nPobierz cheaty pojedynczo, wybierając repozytorium i klikając przycisk pobierania.\nNa zakładce Patches możesz pobrać wszystkie patche jednocześnie, wybrać, które chcesz używać, i zapisać wybór.\n\nPonieważ nie rozwijamy Cheats/Patches,\nproszę zgłosić problemy do autora cheatu.\n\nStworzyłeś nowy cheat? Odwiedź:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Brak dostępnego obrazu</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Numer seryjny: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Wersja: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Rozmiar: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Wybierz plik kodu:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repozytorium:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Pobierz kody</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="162"/>
<source>Remove Old Files</source>
<translation>Usuń stare pliki</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="168"/>
<source>Do you want to delete the files after downloading them?</source>
<translation>Czy chcesz usunąć pliki po ich pobraniu?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="174"/>
<source>Do you want to delete the files after downloading them?\n%1</source>
<translation>Czy chcesz usunąć pliki po ich pobraniu?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Czy chcesz usunąć wybrany plik?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Wybierz plik poprawki:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Pobierz poprawki</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Zapisz</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Kody</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Poprawki</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Nie wybrano poprawki.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Nie można otworzyć pliku files.json do odczytu.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Nie znaleziono pliku poprawki dla bieżącego numeru seryjnego.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Nie można otworzyć pliku do odczytu.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Nie można otworzyć pliku do zapisu.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Nie udało się sparsować XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Sukces</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Opcje zostały pomyślnie zapisane.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Nieprawidłowe źródło</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Wybrane źródło jest nieprawidłowe.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Plik istnieje</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Plik już istnieje. Czy chcesz go zastąpić?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Nie udało się zapisać pliku:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Nie udało się pobrać pliku:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Nie znaleziono kodów</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Nie znaleziono kodów do tej gry w tej wersji wybranego repozytorium.Spróbuj innego repozytorium lub innej wersji gry.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Kody pobrane pomyślnie</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Pomyślnie pobrano kody dla tej wersji gry z wybranego repozytorium. Możesz spróbować pobrać z innego repozytorium. Jeśli jest dostępne, możesz również użyć go, wybierając plik z listy.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Nie udało się zapisać:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Nie udało się pobrać:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Pobieranie zakończone</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Poprawki zostały pomyślnie pobrane! Wszystkie dostępne poprawki dla wszystkich gier zostały pobrane. Nie ma potrzeby pobierania ich osobno dla każdej gry, która ma kody.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Nie udało się sparsować danych JSON z HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Nie udało się pobrać strony HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Nie udało się otworzyć pliku:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>BŁĄD XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Nie udało się otworzyć pliku files.json do zapisu</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Autor: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Katalog nie istnieje:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="999"/>
<source>Directory does not exist: %1</source>
<translation>Katalog nie istnieje: %1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1052"/>
<source>Failed to parse JSON:</source>
<translation>Nie udało się sparsować JSON:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="pt_BR">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>Sobre o shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 é um emulador experimental de código-fonte aberto para o PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>Este software não deve ser usado para jogar jogos piratas.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Abrir Pasta</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Carregando lista de jogos, por favor aguarde :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Carregando...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Escolha o diretório</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Diretório para instalar jogos</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Procurar</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Erro</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>O diretório da instalação dos jogos não é válido.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Criar Atalho</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Abrir Pasta do Jogo</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>Visualizador de SFO</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Visualizador de Troféu</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copiar informação</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copiar Nome</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copiar Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copiar Tudo</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Criação de atalho</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Atalho criado com sucesso!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Erro</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Erro ao criar atalho!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Instalar PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Abrir/Adicionar pasta Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Instalar Pacotes (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Iniciar Jogo</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>Sobre o shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configurar...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Instalar aplicação de um arquivo .pkg</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Jogos Recentes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Sair</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Sair do shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Sair da aplicação.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Mostrar Lista de Jogos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Atualizar Lista de Jogos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Muito pequeno</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Pequeno</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Médio</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Grande</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Visualizar em Lista</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Visualizar em Grade</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Visualizador de Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Diretório de Instalação de Jogos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Baixar Trapaças / Patches</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dumpar Lista de Jogos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>Visualizador de PKG</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Pesquisar...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>Arquivo</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Ver</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Ícones da Lista de Jogos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Modo de Lista de Jogos</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Configurações</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utilitários</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Temas</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>Sobre</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Escuro</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Claro</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Verde</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Azul</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violeta</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>Barra de Ferramentas</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Abrir Pasta</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Visualizador de Troféu</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Configurações</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>Geral</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>Sistema</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Idioma do Console</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Idioma do Emulador</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulador</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Ativar Tela Cheia</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Mostrar Splash Inicial</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Modo PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Nome de usuário</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Registro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Tipo de Registro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Filtro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Gráficos</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Placa de Vídeo</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Largura</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Altura</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Divisor Vblank</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Avançado</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Ativar Dumping de Shaders</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Ativar GPU NULA</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Ativar Dumping de PM4</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Depuração</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Ativar Depuração de Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Ativar Camadas de Validação do Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Ativar Validação de Sincronização do Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Ativar Depuração por RenderDoc</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Versão Vulkan não suportada</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Baixar Trapaças para todos os jogos instalados</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Baixar Patches para todos os jogos</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Download Completo</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Você baixou trapaças para todos os jogos que instalou.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patches Baixados com Sucesso!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Todos os patches disponíveis para todos os jogos foram baixados.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Jogos: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Arquivo PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Arquivos ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Inicialização do Jogo</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Apenas um arquivo pode ser selecionado!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Extração de PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch detectado!\nVersões PKG e do Jogo correspondem!: %1\nGostaria de </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>substituir?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch detectado!\nVersão PKG %1 é mais antiga </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>do que a versão instalada!: %2\nGostaria de </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>substituir?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch detectado!\nJogo está instalado: %1\nGostaria de </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>instalar o Patch: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Jogo instalado\n%1\nGostaria de substituir?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG é um patch, por favor, instale o jogo primeiro!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>ERRO PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Extraindo PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extração Concluída</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Jogo instalado com sucesso em %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>O arquivo não parece ser um arquivo PKG válido</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Trapaças / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Trapaças/Patches são experimentais.\nUse com cautela.\n\nBaixe as trapaças individualmente selecionando o repositório e clicando no botão de download.\nNa aba Patches, você pode baixar todos os Patches de uma vez, escolher qual deseja usar e salvar a opção.\n\nComo não desenvolvemos as Trapaças/Patches,\npor favor, reporte problemas relacionados ao autor da trapaça.\n\nCriou uma nova trapaça? Visite:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Imagem Não Disponível</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Série: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versão: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Tamanho: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Selecione o Arquivo de Trapaça:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repositório:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Baixar Trapaças</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Excluir Arquivo</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Nenhum arquivo selecionado.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Você pode excluir as trapaças que não deseja após baixá-las.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Deseja excluir o arquivo selecionado?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Selecione o Arquivo de Patch:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Baixar Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Salvar</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Trapaças</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Erro</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Nenhum patch selecionado.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Não foi possível abrir files.json para leitura.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Nenhum arquivo de patch encontrado para a série atual.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Não foi possível abrir o arquivo para leitura.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Não foi possível abrir o arquivo para gravação.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Falha ao analisar XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Sucesso</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Opções salvas com sucesso.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Fonte Inválida</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>A fonte selecionada é inválida.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Arquivo Existe</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>O arquivo existe. Deseja substituí-lo?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Falha ao salvar o arquivo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Falha ao baixar o arquivo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Trapaças Não Encontradas</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Nenhuma trapaça encontrada para este jogo nesta versão do repositório selecionado, tente outro repositório ou uma versão diferente do jogo.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Trapaças Baixadas com Sucesso</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Você baixou as trapaças com sucesso. Para esta versão do jogo a partir do repositório selecionado.Você pode tentar baixar de outro repositório, se estiver disponível, também será possível usá-lo selecionando o arquivo da lista.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Falha ao salvar:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Falha ao baixar:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Download Completo</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patches Baixados com Sucesso! Todos os patches disponíveis para todos os jogos foram baixados, não é necessário baixá-los individualmente para cada jogo como acontece com as Trapaças.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Falha ao analisar dados JSON do HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Falha ao recuperar a página HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Falha ao abrir o arquivo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>ERRO XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Falha ao abrir files.json para gravação</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Autor: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Diretório não existe:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Falha ao abrir files.json para leitura.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Nome:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="ro_RO">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Trapaças / Patches</source>
<translation>Coduri / Patch-uri</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Descarcă Coduri / Patch-uri</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Versiune Vulkan nesuportată</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Descarcă Cheats pentru toate jocurile instalate</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Descarcă Patches pentru toate jocurile</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Descărcare completă</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Ai descărcat cheats pentru toate jocurile instalate.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Patches descărcate cu succes!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Toate Patches disponibile pentru toate jocurile au fost descărcate.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Jocuri: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Fișier PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Fișiere ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Boot Joc</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Numai un fișier poate fi selectat!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Extracție PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Patch detectat!\nVersiunile PKG și Joc se potrivesc!: %1\nAi dori </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation> suprascrii?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Patch detectat!\nVersiunea PKG %1 este mai veche </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>decât versiunea instalată!: %2\nAi dori </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation> suprascrii?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Patch detectat!\nJocul este instalat: %1\nAi dori </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation> instalezi Patch-ul: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Jocul este deja instalat\n%1\nAi dori suprascrii?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG este un patch, te rugăm instalezi mai întâi jocul!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>EROARE PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Extracție PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Extracție terminată</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Jocul a fost instalat cu succes la %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Fișierul nu pare fie un fișier PKG valid</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches sunt experimentale.\nUtilizați cu prudență.\n\nDescărcați cheats individual prin selectarea depozitului și făcând clic pe butonul de descărcare.\nÎn fila Patches, puteți descărca toate patch-urile deodată, alege pe cele pe care doriți le utilizați și salvați selecția.\n\nDeoarece nu dezvoltăm Cheats/Patches,\nte rugăm raportezi problemele autorului cheat-ului.\n\nAi creat un nou cheat? Vizitează:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Nu este disponibilă imaginea</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Serial: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Versiune: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Dimensiune: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Selectează fișierul Cheat:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Repository:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Descarcă Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Șterge Fișierul</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Nu sunt fișiere selectate.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Poti șterge cheats-urile pe care nu le dorești după ce le-ai descărcat.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Vrei ștergi fișierul selectat?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Selectează fișierul Patch:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Descarcă Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Salvează</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Eroare</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Nu este selectat niciun patch.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Imposibil de deschis files.json pentru citire.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Nu s-a găsit niciun fișier patch pentru serialul curent.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Imposibil de deschis fișierul pentru citire.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Imposibil de deschis fișierul pentru scriere.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Nu s-a reușit pararea XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Succes</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Opțiunile au fost salvate cu succes.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Sursă invalidă</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Sursa selectată este invalidă.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Fișier existent</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Fișierul există deja. Vrei -l înlocuiești?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Nu s-a reușit salvarea fișierului:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Nu s-a reușit descărcarea fișierului:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Cheats Nu au fost găsite</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Nu au fost găsite cheats pentru acest joc în această versiune a repository-ului selectat, încearcă un alt repository sau o versiune diferită a jocului.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats descărcate cu succes</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Ai descărcat cu succes cheats-urile pentru această versiune a jocului din repository-ul selectat. Poți încerca descărcarea din alt repository; dacă este disponibil, va fi posibil -l folosești selectând fișierul din listă.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Nu s-a reușit salvarea:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Nu s-a reușit descărcarea:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Descărcare completă</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Patches descărcate cu succes! Toate Patches disponibile pentru toate jocurile au fost descărcate; nu este nevoie le descarci individual pentru fiecare joc, așa cum se întâmplă cu Cheats.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Nu s-a reușit pararea datelor JSON din HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Nu s-a reușit obținerea paginii HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Nu s-a reușit deschiderea fișierului:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>EROARE XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Nu s-a reușit deschiderea files.json pentru scriere</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Autor: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Directorul nu există:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Nu s-a reușit deschiderea files.json pentru citire.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Nume:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="ru_RU">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>О shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 это экспериментальный эмулятор с открытым исходным кодом для PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>Это програмное обеспечение не должно использоваться для запуска игр, которые вы получили нелегально.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Открыть папку</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Загрузка списка игр, пожалуйста подождите :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Отмена</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Загрузка...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Выберите папку</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Папка для установки игр</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Обзор</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>Недопустимое значение местоположения для установки игр.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Создать ярлык</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Открыть папку с игрой</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Читы / Патчи</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>Просмотр SFO</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Просмотр трофеев</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Копировать информацию</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Копировать имя</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Копировать серийный номер</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Копировать все</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Создание ярлыка</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Ярлык создан успешно!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Ошибка создания ярлыка!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Установить PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Открыть/Добавить папку Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Установить пакеты (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Запустить игру</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>О shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Настроить...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Установить приложение из файла .pkg</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Недавние игры</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Выход</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Выйти из shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Выйти из приложения.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Показать список игр</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Обновить список игр</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Крошечный</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Маленький</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Средний</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Большой</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Список</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Сетка</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Каталог установки игры</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Скачать Читы / Патчи</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Дамп списка игр</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>Просмотр PKG</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Поиск...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>Файл</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Вид</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Размер иконок списка игр</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Вид списка игр</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Настройки</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Утилиты</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Темы</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>Справка</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Темная</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Светлая</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Зеленая</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Синяя</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Фиолетовая</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>Панель инструментов</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Открыть папку</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Трофеи</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Настройки</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>Общее</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>Система</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Язык консоли</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Язык эмулятора</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Эмулятор</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Включить полноэкранный режим</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Показать заставку</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Режим PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Имя пользователя</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Логирование</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Тип логов</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Фильтр логов</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Графика</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Графическое устройство</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Ширина</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Высота</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Разделитель Vblank</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Продвинутые</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Включить дамп шейдеров</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Включить NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Включить дамп PM4</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Отладка</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Включить отладочные дампы</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Включить слои валидации Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Включить валидацию синхронизации Vulkan</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Включить отладку RenderDoc</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Неподдерживаемая версия Vulkan</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Скачать читы для всех установленных игр</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Скачать патчи для всех игр</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Скачивание завершено</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Вы скачали читы для всех установленных игр.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Патчи успешно скачаны!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Все доступные патчи для всех игр были скачаны.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Игры: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Файл PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Файл ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Запуск игры</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Можно выбрать только один файл!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Извлечение PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Обнаружен патч!\nВерсии PKG и игры совпадают!: %1\nХотите </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>перезаписать?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Обнаружен патч!\nВерсия PKG %1 устарела </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>по сравнению с установленной версией!: %2\nХотите </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>перезаписать?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Обнаружен патч!\гра установлена: %1\nХотите </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>установить патч: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Игра уже установлена\n%1\nХотите перезаписать?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG - это патч, сначала установите игру!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>ОШИБКА PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Извлечение PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Извлечение завершено</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Игра успешно установлена по адресу %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Файл не является допустимым файлом PKG</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Читы / Патчи</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches sunt experimentale.\nUtilizați cu prudență.\n\nDescărcați cheats individual prin selectarea depozitului și făcând clic pe butonul de descărcare.\nÎn fila Patches, puteți descărca toate patch-urile deodată, alege pe cele pe care doriți le utilizați și salvați selecția.\n\nDeoarece nu dezvoltăm Cheats/Patches,\nte rugăm raportezi problemele autorului cheat-ului.\n\nAi creat un nou cheat? Vizitează:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Изображение недоступно</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Серийный номер: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Версия: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Размер: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Выберите файл чита:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Репозиторий:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Скачать читы</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Удалить файл</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Файлы не выбраны.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Вы можете удалить ненужные читы после их скачивания.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Вы хотите удалить выбранный файл?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Выберите файл патча:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Скачать патчи</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Сохранить</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Читы</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Патчи</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Патч не выбран.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Не удалось открыть файл files.json для чтения.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Не найден файл патча для текущего серийного номера.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Не удалось открыть файл для чтения.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Не удалось открыть файл для записи.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Не удалось разобрать XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Успех</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Опции успешно сохранены.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Неверный источник</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Выбранный источник недействителен.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Файл существует</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Файл уже существует. Хотите заменить его?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Не удалось сохранить файл:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Не удалось скачать файл:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Читы не найдены</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Читы не найдены для этой игры в выбранном репозитории. Попробуйте другой репозиторий или другую версию игры.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Читы успешно скачаны</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Вы успешно скачали читы для этой версии игры из выбранного репозитория. Вы можете попробовать скачать из другого репозитория. Если он доступен, его также можно будет использовать, выбрав файл из списка.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Не удалось сохранить:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Не удалось скачать:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Скачивание завершено</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Патчи успешно скачаны! Все доступные патчи для всех игр были скачаны, нет необходимости скачивать их по отдельности для каждой игры, как это происходит с читами.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Не удалось разобрать данные JSON из HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Не удалось получить HTML-страницу.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Не удалось открыть файл:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>ОШИБКА XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Не удалось открыть файл files.json для записи</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Автор: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Каталог не существует:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Не удалось открыть файл files.json для чтения.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Имя:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,963 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="tr_TR">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>shadPS4 Hakkında</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4, PlayStation 4 için deneysel bir ık kaynak kodlu emülatördür.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>Bu yazılım, yasal olarak edinmediğiniz oyunları oynamak için kullanılmamalıdır.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Klasörü </translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Oyun listesi yükleniyor, lütfen bekleyin :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>İptal</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Yükleniyor...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Klasörü Seç</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Oyunların yükleneceği klasör</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Gözat</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Hata</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>Oyunların yükleneceği konum için girilen klasör geçerli değil.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Kısayol Oluştur</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Oyun Klasörünü </translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Hileler / Yamanlar</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Görüntüleyici</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Kupa Görüntüleyici</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Bilgiyi Kopyala</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Adı Kopyala</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Seri Numarasını Kopyala</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Tümünü Kopyala</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Kısayol oluşturma</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Kısayol başarıyla oluşturuldu!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Hata</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Kısayol oluşturulurken hata oluştu!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>PKG Yükle</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Elf Klasörünü /Ekle</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Paketleri Kur (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Oyunu Başlat</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>shadPS4 Hakkında</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Yapılandır...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>.pkg dosyasından uygulama yükle</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Son Oyunlar</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Çıkış</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>shadPS4'ten Çık</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Uygulamadan çık.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Oyun Listesini Göster</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Oyun Listesini Yenile</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Küçük</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Ufak</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Orta</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Büyük</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>Liste Görünümü</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Izgara Görünümü</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Görüntüleyici</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Oyun Kurulum Klasörü</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Hileler / Yamanlar İndir</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Oyun Listesini Kaydet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Görüntüleyici</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Ara...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>Dosya</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>Görünüm</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Oyun Listesi Simgeleri</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Oyun Listesi Modu</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Ayarlar</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Yardımcı Araçlar</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Temalar</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>Hakkında</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Koyu</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>ık</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Yeşil</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Mavi</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Mor</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>Araç Çubuğu</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Klasörü </translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Kupa Görüntüleyici</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Ayarlar</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>Genel</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>Sistem</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Konsol Dili</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emülatör Dili</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emülatör</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Tam Ekranı Etkinleştir</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Başlangıç Ekranını Göster</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>PS4 Pro mu</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Kullanıcı Adı</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Kayıt Tutucu</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Kayıt Türü</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Kayıt Filtresi</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Grafikler</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Grafik Cihazı</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Genişlik</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Yükseklik</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Bölücü</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Gelişmiş</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Shader Kaydını Etkinleştir</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>NULL GPU'yu Etkinleştir</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>PM4 Kaydını Etkinleştir</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Hata Ayıklama</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Hata Ayıklama Dökümü Etkinleştir</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Vulkan Doğrulama Katmanlarını Etkinleştir</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Vulkan Senkronizasyon Doğrulamasını Etkinleştir</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>RenderDoc Hata Ayıklamayı Etkinleştir</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Desteklenmeyen Vulkan Sürümü</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Tüm Yüklenmiş Oyunlar İçin Hileleri İndir</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Tüm Oyunlar İçin Yamanları İndir</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>İndirme Tamamlandı</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Yüklediğiniz tüm oyunlar için hileleri indirdiniz.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Yamalar Başarıyla İndirildi!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Tüm oyunlar için mevcut tüm yamalar indirildi.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Oyunlar: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG Dosyası (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF Dosyaları (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Oyun Başlatma</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Sadece bir dosya seçilebilir!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG Çıkartma</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Yama tespit edildi!\nPKG ve Oyun sürümleri uyuyor!: %1\nÜzerine yazmak ister misiniz?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>üzerine yazmak?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Yama tespit edildi!\nPKG Sürümü %1 daha eski </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>yüklü sürümden!: %2\nÜzerine yazmak ister misiniz?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>üzerine yazmak?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Yama tespit edildi!\nOyun yüklü: %1\nÜzerine yazmak ister misiniz?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>Yamayı kurmak ister misiniz: %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Oyun zaten yüklü\n%1\nÜzerine yazmak ister misiniz?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG bir yama, lütfen önce oyunu yükleyin!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG HATASI</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>PKG Çıkarılıyor %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Çıkarma Tamamlandı</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Oyun başarıyla %1 konumuna yüklendi</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Dosya geçerli bir PKG dosyası gibi görünmüyor</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Hileler / Yamalar</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches deneysel niteliktedir.\nDikkatli kullanın.\n\nCheat'leri ayrı ayrı indirerek, depo seçerek ve indirme düğmesine tıklayarak indirin.\nPatches sekmesinde tüm patch'leri bir kerede indirebilir, hangi patch'leri kullanmak istediğinizi seçebilir ve seçiminizi kaydedebilirsiniz.\n\nCheats/Patches'i geliştirmediğimiz için,\nproblemleri cheat yazarına bildirin.\n\nYeni bir cheat mi oluşturduğunuz? Şu adresi ziyaret edin:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Görüntü Mevcut Değil</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Seri Numarası: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Sürüm: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Boyut: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Hile Dosyasını Seçin:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Depo:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Hileleri İndir</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Confirm Delete</source>
<translation>Silme Onayı</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="156"/>
<source>Are you sure you want to delete the selected cheat?\n%1</source>
<translation>Seçilen hileyi silmek istediğinizden emin misiniz?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>İndirdikten sonra istemediğiniz hileleri silebilirsiniz.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Seçilen dosyayı silmek istiyor musunuz?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Yama Dosyasını Seçin:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Yamaları İndir</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Kaydet</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Hileler</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Yamalar</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Hata</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Hiç yama seçilmedi.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>files.json dosyasını okumak için ılamadı.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Mevcut seri numarası için hiç yama dosyası bulunamadı.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Dosya okumak için ılamadı.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Dosya yazmak için ılamadı.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>XML ayrıştırılamadı: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Başarı</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Ayarlar başarıyla kaydedildi.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Geçersiz Kaynak</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Seçilen kaynak geçersiz.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Dosya Var</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Dosya zaten var. Üzerine yazmak ister misiniz?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Dosya kaydedilemedi:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Dosya indirilemedi:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Hileler Bulunamadı</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Bu oyun için seçilen depoda hile bulunamadı.Başka bir depo veya oyun sürümü deneyin.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Hileler Başarıyla İndirildi</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Bu oyun sürümü için hileleri başarıyla indirdiniz. Başka bir depodan indirmeyi deneyebilirsiniz. Eğer mevcutsa, listeden dosyayı seçerek de kullanılabilir.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Kaydedilemedi:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>İndirilemedi:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>İndirme Tamamlandı</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Yamalar başarıyla indirildi! Tüm oyunlar için mevcut tüm yamalar indirildi, her oyun için ayrı ayrı indirme yapmanız gerekmez, hilelerle olduğu gibi.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>HTML'den JSON verileri ayrıştırılamadı.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>HTML sayfası alınamadı.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Dosya ılamadı:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML HATASI:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>files.json dosyası yazmak için ılamadı</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Yazar: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Klasör mevcut değil:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>files.json dosyası okumak için ılamadı.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>İsim:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1007"/>
<source>Version:</source>
<translation>Sürüm:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1008"/>
<source>Size:</source>
<translation>Boyut:</translation>
</message>
</context>
<context>
<name>LangDialog</name>
<message>
<location filename="../lang_dialog.cpp" line="23"/>
<source>Language Settings</source>
<translation>Dil Ayarları</translation>
</message>
<message>
<location filename="../lang_dialog.cpp" line="30"/>
<source>Select Language:</source>
<translation>Dil Seçin:</translation>
</message>
<message>
<location filename="../lang_dialog.cpp" line="50"/>
<source>Restart Required</source>
<translation>Yeniden Başlatma Gerekiyor</translation>
</message>
<message>
<location filename="../lang_dialog.cpp" line="51"/>
<source>Changes will take effect after restarting the application.</source>
<translation>Değişiklikler uygulama yeniden başlatıldığında geçerli olacaktır.</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.cpp" line="40"/>
<source>Settings</source>
<translation>Ayarlar</translation>
</message>
<message>
<location filename="../settings_dialog.cpp" line="45"/>
<source>General</source>
<translation>Genel</translation>
</message>
<message>
<location filename="../settings_dialog.cpp" line="49"/>
<source>Cheats</source>
<translation>Hileler</translation>
</message>
<message>
<location filename="../settings_dialog.cpp" line="52"/>
<source>Update</source>
<translation>Güncelleme</translation>
</message>
<message>
<location filename="../settings_dialog.cpp" line="55"/>
<source>Save</source>
<translation>Kaydet</translation>
</message>
<message>
<location filename="../settings_dialog.cpp" line="66"/>
<source>Reset to Default</source>
<translation>Varsayılana Sıfırla</translation>
</message>
<message>
<location filename="../settings_dialog.cpp" line="73"/>
<source>Apply Changes</source>
<translation>Değişiklikleri Uygula</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="vi_VN">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Mẹo / Bản </translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Tải Mẹo / Bản </translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Phiên bản Vulkan không đưc hỗ trợ</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Tải xuống cheat cho tất cả các trò chơi đã cài đt</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Tải xuống bản cho tất cả các trò chơi</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Tải xuống hoàn tất</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Bạn đã tải xuống cheat cho tất cả các trò chơi bạn đã cài đt.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Bản đã tải xuống thành công!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Tất cả các bản sẵn cho tất cả các trò chơi đã đưc tải xuống.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Trò chơi: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Tệp PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Tệp ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Khởi đng trò chơi</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Chỉ thể chọn một tệp duy nhất!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Giải nén PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Đã phát hiện bản !\nPhiên bản PKG trò chơi khớp!: %1\nBạn muốn </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>ghi đè không?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Đã phát hiện bản !\nPhiên bản PKG %1 hơn </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>so với phiên bản đã cài đt!: %2\nBạn muốn </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>ghi đè không?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Đã phát hiện bản !\nTrò chơi đã đưc cài đt: %1\nBạn muốn </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>cài đt bản : %2?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Trò chơi đã đưc cài đt\n%1\nBạn muốn ghi đè không?</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG bản , vui lòng cài đt trò chơi trước!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>LOI PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Đang giải nén PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Giải nén hoàn tất</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Trò chơi đã đưc cài đt thành công tại %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Tệp không vẻ tệp PKG hợp lệ</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheat / Bản </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Cheats/Patches các tính năng thử nghiệm.\nHãy sử dụng cẩn thận.\n\nTải xuống các cheat riêng lẻ bằng cách chọn kho lưu trữ nhấp vào nút tải xuống.\nTại tab Patches, bạn thể tải xuống tất cả các patch cùng một lúc, chọn cái nào bạn muốn sử dụng lưu lựa chọn của mình.\n\nVì chúng tôi không phát triển Cheats/Patches,\nxin vui lòng báo cáo các vấn đ cho tác giả cheat.\n\nBạn đã tạo ra một cheat mới? Truy cập:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Không hình nh</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Số seri: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Phiên bản: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Kích thước: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Chọn tệp Cheat:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Kho lưu trữ:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Tải xuống Cheat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Xóa tệp</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Không tệp nào đưc chọn.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Bạn thể xóa các cheat không muốn sau khi tải xuống.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Bạn muốn xóa tệp đã chọn?\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Chọn tệp Bản :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Tải xuống Bản </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Lưu</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Bản </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Lỗi</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Không bản nào đưc chọn.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Không thể mở files.json đ đc.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Không tìm thấy tệp bản cho số seri hiện tại.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Không thể mở tệp đ đc.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Không thể mở tệp đ ghi.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Không thể phân tích XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Thành công</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Các tùy chọn đã đưc lưu thành công.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Nguồn không hợp lệ</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Nguồn đã chọn không hợp lệ.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Tệp đã tồn tại</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Tệp đã tồn tại. Bạn muốn thay thế không?</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Không thể lưu tệp:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Không thể tải xuống tệp:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Không tìm thấy Cheat</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Không tìm thấy Cheat cho trò chơi này trong phiên bản kho lưu trữ đã chọn,hãy thử kho lưu trữ khác hoặc phiên bản khác của trò chơi.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheat đã tải xuống thành công</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Bạn đã tải xuống các cheat thành công. Cho phiên bản trò chơi này từ kho lưu trữ đã chọn. Bạn thể thử tải xuống từ kho lưu trữ khác, nếu , bạn cũng thể sử dụng bằng cách chọn tệp từ danh sách.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Không thể lưu:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Không thể tải xuống:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Tải xuống hoàn tất</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Bản đã tải xuống thành công! Tất cả các bản sẵn cho tất cả các trò chơi đã đưc tải xuống, không cần tải xuống riêng lẻ cho mỗi trò chơi như trong Cheat.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Không thể phân tích dữ liệu JSON từ HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Không thể lấy trang HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Không thể mở tệp:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>LỖI XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Không thể mở files.json đ ghi</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Tác giả: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Thư mục không tồn tại:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Không thể mở files.json đ đc.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Tên:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="zh_CN">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Zuòbì / Bǔdīng</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Xiàzài Zuòbì / Bǔdīng</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG </translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>\nPKG %1\n您想要 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>\nPKG %1 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>%2\n您想要 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>\n游戏已安装%1\n您想要 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>\n%1\n您想要覆盖吗</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG </translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG </translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation> PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation> %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation> PKG </translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation> / </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>/\n请小心使用\n\n通过选择存储库并点击下载按钮\n在使\n\n由于我们不开发作弊程序/\n请将问题报告给作弊程序的作者\n\n创建了新的作弊程序访\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation> files.json </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation> XML : </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation> 使</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation> HTML JSON </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation> HTML </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation> files.json </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation> files.json </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>:</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,892 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="zh_TW">
<!-- SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later -->
<context>
<name>AboutDialog</name>
<message>
<location filename="../about_dialog.ui" line="16"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="60"/>
<source>shadPS4</source>
<translation>shadPS4</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="78"/>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation>shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation>
</message>
<message>
<location filename="../about_dialog.ui" line="99"/>
<source>This software should not be used to play games you have not legally obtained.</source>
<translation>This software should not be used to play games you have not legally obtained.</translation>
</message>
</context>
<context>
<name>ElfViewer</name>
<message>
<location filename="../elf_viewer.cpp" line="45"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>GameInfoClass</name>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Loading game list, please wait :3</source>
<translation>Loading game list, please wait :3</translation>
</message>
<message>
<location filename="../game_info.cpp" line="26"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../game_info.cpp" line="27"/>
<source>Loading...</source>
<translation>Loading...</translation>
</message>
</context>
<context>
<name>GameInstallDialog</name>
<message>
<location filename="../game_install_dialog.cpp" line="24"/>
<source>shadPS4 - Choose directory</source>
<translation>shadPS4 - Choose directory</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="31"/>
<source>Directory to install games</source>
<translation>Directory to install games</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="50"/>
<source>Browse</source>
<translation>Browse</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="74"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../game_install_dialog.cpp" line="75"/>
<source>The value for location to install games is not valid.</source>
<translation>The value for location to install games is not valid.</translation>
</message>
</context>
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Zuòbì / Xiūbǔ chéngshì</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window_ui.h" line="310"/>
<source>Open/Add Elf Folder</source>
<translation>Open/Add Elf Folder</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="312"/>
<source>Install Packages (PKG)</source>
<translation>Install Packages (PKG)</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="313"/>
<source>Boot Game</source>
<translation>Boot Game</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="314"/>
<source>About shadPS4</source>
<translation>About shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="315"/>
<source>Configure...</source>
<translation>Configure...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="318"/>
<source>Install application from a .pkg file</source>
<translation>Install application from a .pkg file</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="320"/>
<source>Recent Games</source>
<translation>Recent Games</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="321"/>
<source>Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="323"/>
<source>Exit shadPS4</source>
<translation>Exit shadPS4</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="327"/>
<source>Exit the application.</source>
<translation>Exit the application.</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="330"/>
<source>Show Game List</source>
<translation>Show Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="332"/>
<source>Game List Refresh</source>
<translation>Game List Refresh</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="333"/>
<source>Tiny</source>
<translation>Tiny</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="334"/>
<source>Small</source>
<translation>Small</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="335"/>
<source>Medium</source>
<translation>Medium</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="336"/>
<source>Large</source>
<translation>Large</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="338"/>
<source>List View</source>
<translation>List View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="340"/>
<source>Grid View</source>
<translation>Grid View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="341"/>
<source>Elf Viewer</source>
<translation>Elf Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Xiàzài Zuòbì / Xiūbǔ chéngshì</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
<translation>Dump Game List</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="346"/>
<source>PKG Viewer</source>
<translation>PKG Viewer</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="348"/>
<source>Search...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="349"/>
<source>File</source>
<translation>File</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="350"/>
<source>View</source>
<translation>View</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="352"/>
<source>Game List Icons</source>
<translation>Game List Icons</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="354"/>
<source>Game List Mode</source>
<translation>Game List Mode</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="355"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="356"/>
<source>Utils</source>
<translation>Utils</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="357"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="358"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="359"/>
<source>Dark</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="360"/>
<source>Light</source>
<translation>Light</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="361"/>
<source>Green</source>
<translation>Green</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="362"/>
<source>Blue</source>
<translation>Blue</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="363"/>
<source>Violet</source>
<translation>Violet</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="364"/>
<source>toolBar</source>
<translation>toolBar</translation>
</message>
</context>
<context>
<name>PKGViewer</name>
<message>
<location filename="../pkg_viewer.cpp" line="32"/>
<source>Open Folder</source>
<translation>Open Folder</translation>
</message>
</context>
<context>
<name>TrophyViewer</name>
<message>
<location filename="../trophy_viewer.cpp" line="8"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settings_dialog.ui" line="29"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="67"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="77"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="83"/>
<source>Console Language</source>
<translation>Console Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="95"/>
<source>Emulator Language</source>
<translation>Emulator Language</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="114"/>
<source>Emulator</source>
<translation>Emulator</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="122"/>
<source>Enable Fullscreen</source>
<translation>Enable Fullscreen</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="129"/>
<source>Show Splash</source>
<translation>Show Splash</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="136"/>
<source>Is PS4 Pro</source>
<translation>Is PS4 Pro</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="155"/>
<source>Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="178"/>
<source>Logger</source>
<translation>Logger</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="199"/>
<source>Log Type</source>
<translation>Log Type</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="235"/>
<source>Log Filter</source>
<translation>Log Filter</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="272"/>
<source>Graphics</source>
<translation>Graphics</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="282"/>
<source>Graphics Device</source>
<translation>Graphics Device</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="326"/>
<source>Width</source>
<translation>Width</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="357"/>
<source>Height</source>
<translation>Height</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="405"/>
<source>Vblank Divider</source>
<translation>Vblank Divider</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="453"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="462"/>
<source>Enable Shaders Dumping</source>
<translation>Enable Shaders Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="469"/>
<source>Enable NULL GPU</source>
<translation>Enable NULL GPU</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="476"/>
<source>Enable PM4 Dumping</source>
<translation>Enable PM4 Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="517"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="537"/>
<source>Enable Debug Dumping</source>
<translation>Enable Debug Dumping</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="560"/>
<source>Enable Vulkan Validation Layers</source>
<translation>Enable Vulkan Validation Layers</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="567"/>
<source>Enable Vulkan Synchronization Validation</source>
<translation>Enable Vulkan Synchronization Validation</translation>
</message>
<message>
<location filename="../settings_dialog.ui" line="574"/>
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>PKG </translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>\nPKG : %1\n您是否希望 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>\nPKG %1 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>: %2\n您是否希望 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>\n遊戲已安裝: %1\n您是否希望 </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>: %2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>\n%1\n您是否希望覆蓋</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>PKG </translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>PKG </translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation> PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation></translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation> %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation> PKG </translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation> / </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>/\n請小心使用\n\n透過選擇儲存庫並點擊下載按鈕來單獨下載作弊程式\n在使\n\n由於我們不開發作弊/\n請將問題報告給作弊程式的作者\n\n創建了新的作弊程式\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation> files.json </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation> XML : </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation> 使</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation></translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation> HTML JSON </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation> HTML </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>XML :</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation> files.json </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation> files.json </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>:</translation>
</message>
</context>
</TS>

View File

@ -5,7 +5,7 @@
#include "trophy_viewer.h"
TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindow() {
this->setWindowTitle("Trophy Viewer");
this->setWindowTitle(tr("Trophy Viewer"));
this->setAttribute(Qt::WA_DeleteOnClose);
tabWidget = new QTabWidget(this);
gameTrpPath_ = gameTrpPath;

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